diff options
author | Hans Goudey <h.goudey@me.com> | 2022-01-12 23:26:07 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-01-12 23:26:07 +0300 |
commit | 03d7d298b5aa804fa8ab7fb28ae26ced0b664e92 (patch) | |
tree | 131da1eafc4bd345d714137495552ec87bf923c5 | |
parent | ffca3b7c5201b27f8e9a59a101f32b667bb91397 (diff) | |
parent | 97c2c39916202f8d3d8e1f651ab9dfa171953af2 (diff) |
Merge branch 'master' into temp-vert-normals-cleanup
239 files changed, 3557 insertions, 19217 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c5b5eb317e..88c71899f8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -559,12 +559,14 @@ if(WIN32) set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${}) endif() -# Compiler toolchain -if(CMAKE_COMPILER_IS_GNUCC) - option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON) - mark_as_advanced(WITH_LINKER_GOLD) - option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF) - mark_as_advanced(WITH_LINKER_LLD) +# Compiler tool-chain. +if(UNIX AND NOT APPLE) + if(CMAKE_COMPILER_IS_GNUCC) + option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON) + mark_as_advanced(WITH_LINKER_GOLD) + option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF) + mark_as_advanced(WITH_LINKER_LLD) + endif() endif() option(WITH_COMPILER_ASAN "Build and link against address sanitizer (only for Debug & RelWithDebInfo targets)." OFF) diff --git a/build_files/build_environment/cmake/gmp.cmake b/build_files/build_environment/cmake/gmp.cmake index 6ca81678a32..dbcce12d24b 100644 --- a/build_files/build_environment/cmake/gmp.cmake +++ b/build_files/build_environment/cmake/gmp.cmake @@ -38,13 +38,6 @@ elseif(UNIX AND NOT APPLE) ) endif() -if(BLENDER_PLATFORM_ARM) - set(GMP_OPTIONS - ${GMP_OPTIONS} - --disable-assembly - ) -endif() - ExternalProject_Add(external_gmp URL file://${PACKAGE_DIR}/${GMP_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index f2c245dc380..c758dbd265e 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -474,9 +474,9 @@ set(ISPC_HASH 2e3abedbc0ea9aaec17d6562c632454d) set(ISPC_HASH_TYPE MD5) set(ISPC_FILE ispc-${ISPC_VERSION}.tar.gz) -set(GMP_VERSION 6.2.0) +set(GMP_VERSION 6.2.1) set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz) -set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1) +set(GMP_HASH 0b82665c4a92fd2ade7440c13fcaa42b) set(GMP_HASH_TYPE MD5) set(GMP_FILE gmp-${GMP_VERSION}.tar.xz) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 34c2c9a684d..25a8b66af51 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1292,29 +1292,6 @@ macro(openmp_delayload endif() endmacro() -macro(blender_precompile_headers target cpp header) - if(MSVC) - # get the name for the pch output file - get_filename_component(pchbase ${cpp} NAME_WE) - set(pchfinal "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${pchbase}.pch") - - # mark the cpp as the one outputting the pch - set_property(SOURCE ${cpp} APPEND PROPERTY OBJECT_OUTPUTS "${pchfinal}") - - # get all sources for the target - get_target_property(sources ${target} SOURCES) - - # make all sources depend on the pch to enforce the build order - foreach(src ${sources}) - set_property(SOURCE ${src} APPEND PROPERTY OBJECT_DEPENDS "${pchfinal}") - endforeach() - - target_sources(${target} PRIVATE ${cpp} ${header}) - set_target_properties(${target} PROPERTIES COMPILE_FLAGS "/Yu${header} /Fp${pchfinal} /FI${header}") - set_source_files_properties(${cpp} PROPERTIES COMPILE_FLAGS "/Yc${header} /Fp${pchfinal}") - endif() -endmacro() - macro(set_and_warn_dependency _dependency _setting _val) # when $_dependency is disabled, forces $_setting = $_val diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 2f1a622c63d..0aaec3083a3 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -18,7 +18,7 @@ # All rights reserved. # ***** END GPL LICENSE BLOCK ***** -# Libraries configuration for any *nix system including Linux and Unix. +# Libraries configuration for any *nix system including Linux and Unix (excluding APPLE). # Detect precompiled library directory if(NOT DEFINED LIBDIR) diff --git a/extern/hipew/src/hipew.c b/extern/hipew/src/hipew.c index 010c361fa46..ecf952e266f 100644 --- a/extern/hipew/src/hipew.c +++ b/extern/hipew/src/hipew.c @@ -257,7 +257,7 @@ static int hipewHipInit(void) { #endif static int initialized = 0; static int result = 0; - int error, driver_version; + int error; if (initialized) { return result; @@ -565,8 +565,6 @@ int hipewCompilerVersion(void) { const char *path = hipewCompilerPath(); const char *marker = "Hip compilation tools, release "; FILE *pipe; - int major, minor; - char *versionstr; char buf[128]; char output[65536] = "\0"; char command[65536] = "\0"; diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h index ce0185bc7d0..7fe9300ec3f 100644 --- a/intern/ghost/GHOST_Types.h +++ b/intern/ghost/GHOST_Types.h @@ -496,8 +496,6 @@ typedef struct { int target_start; /** Represents the position of the end of the selection */ int target_end; - /** custom temporal data */ - GHOST_TUserDataPtr tmp; } GHOST_TEventImeData; typedef struct { diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg index 63e57a22b9d..6de808a9386 100644 --- a/release/datafiles/blender_icons.svg +++ b/release/datafiles/blender_icons.svg @@ -16,7 +16,7 @@ sodipodi:docname="blender_icons.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" style="display:inline;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\ICONS - no backdrop.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <metadata @@ -7170,70 +7170,70 @@ id="g10975" transform="translate(-378.00707,-293.99994)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g id="g10009" transform="translate(5.3904633e-4,-20.999933)" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g transform="translate(-380,231)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g12153" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;opacity:1;fill:#ffffff;enable-background:new" transform="translate(-336.00001,210.00001)" id="g12215" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;fill:#ffffff;enable-background:new" id="g12492" transform="translate(20.999999)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g id="g12457" transform="matrix(0.69230791,0,0,0.69230793,-403.07713,196.14887)" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.44444394;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;fill:#ffffff;enable-background:new" id="g12921" transform="translate(21.999999,-3)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;opacity:0.41300001;fill:#ffffff;enable-background:new" id="g5202-0" transform="translate(496.99495,-311.99288)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;fill:#ffffff;enable-background:new" id="g13534" transform="translate(-9.5367432e-7,21)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g13838" transform="rotate(90,160.07935,395.5873)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7245,7 +7245,7 @@ style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g6922" transform="translate(-378.0172,105)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <circle @@ -7284,7 +7284,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g13212" transform="rotate(-180,454.00583,490.49795)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g @@ -7298,7 +7298,7 @@ <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="circle21483" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" r="4" @@ -7316,7 +7316,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(71.999999)" id="g22120" /> <path @@ -7325,7 +7325,7 @@ r="4.4703369" style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" id="path24502" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" d="" @@ -7333,7 +7333,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new" id="g22419" transform="matrix(-0.866668,0,0,0.866668,728.467,163.39943)" /> @@ -7349,7 +7349,7 @@ style="display:inline;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g22604" transform="translate(420,147)"> <g @@ -7435,7 +7435,7 @@ id="g17481" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" transform="translate(-332.00634,585.99911)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7468,7 +7468,7 @@ transform="translate(41.999988,1.0000045)" id="g10697" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7490,7 +7490,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g10711" transform="translate(598,-637)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7519,7 +7519,7 @@ transform="translate(-252,-252)" id="g10731" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7542,7 +7542,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g15743" transform="translate(221,4.4999696e-6)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7555,7 +7555,7 @@ transform="translate(-84.000002,1.45e-5)" id="g10880" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7612,7 +7612,7 @@ transform="translate(-462.00711,-314.99994)" id="g10872" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7670,7 +7670,7 @@ transform="matrix(0,1,1,0,37.999948,363)" id="g11084" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7683,7 +7683,7 @@ <g transform="translate(-1.8536743e-6,4.4999696e-6)" id="g13852" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" style="display:inline;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"> @@ -7701,7 +7701,7 @@ transform="translate(62.999978,21.041695)" id="g11141" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7759,7 +7759,7 @@ id="g17491" transform="matrix(0.875,0,0,0.875,264.125,159.75)" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.14285719;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -7804,7 +7804,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-42.000002,21.000005)" id="g4035-9" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> @@ -7822,7 +7822,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g12132" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7847,7 +7847,7 @@ id="g7089-6" style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" transform="matrix(-0.75,0,0,0.75,348.75712,418.75712)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7870,7 +7870,7 @@ transform="matrix(-0.75,0,0,0.75,369.25,419.25)" style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333325;enable-background:new" id="g10315-7" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7887,7 +7887,7 @@ id="g10247-8" style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,454.86353,636.75914)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7904,7 +7904,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g12144" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7929,7 +7929,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g5506-8" transform="translate(-44.000002,63.000005)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -7952,7 +7952,7 @@ transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,706.86353,657.75914)" style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" id="g10178-9" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -7983,7 +7983,7 @@ style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new" id="g12595" transform="matrix(0.866668,0,0,0.866668,-177.46699,184.39943)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8001,7 +8001,7 @@ id="g6666-5" transform="translate(-63.000002,42.000005)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8031,7 +8031,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g6750-7" transform="translate(-314.99995,-567)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -8058,7 +8058,7 @@ transform="translate(-231.00712,-588.00007)" id="g23192-6" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8076,7 +8076,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g12563-2" transform="translate(-84.000002,4.4999696e-6)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8105,7 +8105,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g10061" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8162,7 +8162,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g12105" transform="translate(-147.00001,-566.99994)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -8187,7 +8187,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g12135" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8225,7 +8225,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" transform="translate(-420.00718,439.99283)" id="g7406-1-2" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8244,7 +8244,7 @@ id="g6733" transform="translate(-42.000002,503.9)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -8326,7 +8326,7 @@ id="g12536" transform="matrix(0,1,1,0,270,-183)" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8395,7 +8395,7 @@ height="16" x="26" y="136" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g @@ -8433,7 +8433,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12254" transform="translate(-21.000002,-20.999995)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8467,7 +8467,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12207" transform="translate(20.999998,4.4999696e-6)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8492,7 +8492,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12222" transform="rotate(-180,422.50583,500.99795)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8509,7 +8509,7 @@ <g transform="translate(-1.8536743e-6,4.4999696e-6)" id="g13413" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" style="display:inline;fill:#ffffff;enable-background:new"> @@ -8524,7 +8524,7 @@ id="g12575" transform="matrix(0.8666665,0,0,0.8666665,-253.07368,16.407198)" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384638;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8540,7 +8540,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g12901" transform="matrix(-0.79928788,0,0,0.79928788,828.43189,282.2677)" style="display:inline;opacity:0.7;fill:#ffffff;stroke-width:1.25111365;enable-background:new"> @@ -8554,7 +8554,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.25111365;enable-background:new" transform="matrix(-0.79928788,0,0,0.79928788,833.43189,275.2677)" id="g12909"> @@ -8570,7 +8570,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12259" transform="matrix(0,-1,-1,0,313,-85.999995)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8594,7 +8594,7 @@ <g style="display:inline;fill:#ffffff;enable-background:new" id="g12585" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="matrix(-1,0,0,1,782,4.4999696e-6)"> @@ -8620,7 +8620,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12687" transform="translate(-1.8536743e-6,42.000005)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8634,7 +8634,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12682" transform="translate(-1.8536743e-6,42.000005)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8648,7 +8648,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12674" transform="translate(-1.8536743e-6,63.000005)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8662,7 +8662,7 @@ id="g12707" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke-width:1.07692313;enable-background:new" transform="matrix(0.92857149,0,0,0.92857137,22.930148,44.290705)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8676,7 +8676,7 @@ transform="translate(-210.00712,-588.00007)" id="g12466" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8715,7 +8715,7 @@ transform="rotate(-180,670.50713,476.50011)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g9316-9" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8747,7 +8747,7 @@ transform="translate(-1022,-287.00021)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g9304-8" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8775,7 +8775,7 @@ transform="translate(-1021,-287.00021)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g9296-0" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -8817,14 +8817,14 @@ height="16" x="110" y="430" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;fill:#ffffff;enable-background:new" id="g12761" transform="translate(72.999998)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8838,7 +8838,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g12793" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8856,7 +8856,7 @@ id="g12836" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" transform="translate(-123,458.99979)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8875,7 +8875,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12981" transform="translate(-1.8536743e-6,-20.999995)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -8898,7 +8898,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g7347" transform="translate(921.00001,-553)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -8939,7 +8939,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" transform="translate(919,-532)" id="g6686" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -8979,14 +8979,14 @@ height="16" x="320" y="178" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g style="display:inline;fill:#ffffff;stroke-width:1.03551209;enable-background:new" id="g10170-0" transform="matrix(0.93036376,0,0,1.0023904,257.63778,150.90833)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9002,7 +9002,7 @@ width="16" id="rect4967" style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <path @@ -9029,7 +9029,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g5270-3" transform="translate(497.99495,-311.99288)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9064,7 +9064,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g7388-6" transform="translate(731,-238)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -9101,7 +9101,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g14020" transform="translate(153.00001,38.000005)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9131,7 +9131,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g12310-0" transform="translate(62.999998,210)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9160,7 +9160,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g13176" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9175,7 +9175,7 @@ transform="translate(-664,-513.00021)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g8745-3" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9189,7 +9189,7 @@ transform="translate(-801.00006,344.99979)" id="g13204" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9213,14 +9213,14 @@ style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" id="g10431-7" transform="matrix(1,0,0,-1,52.999998,288.99725)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g transform="translate(62.999998,189)" id="g13463" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9234,7 +9234,7 @@ transform="translate(-274.03132,440.00025)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g13513" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9248,7 +9248,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" id="g12940-5" style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9262,7 +9262,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g10027-7" transform="translate(109,-110)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9287,7 +9287,7 @@ transform="translate(365,4.4999696e-6)" id="g13349" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9318,7 +9318,7 @@ d="m 160.5,431 a 1.5,1.5 0 0 0 -1.5,1.5 1.5,1.5 0 0 0 0.0879,0.5 h -4.56836 a 1.50015,1.50015 0 1 0 0,3 H 158 v 1.94922 c -1.31983,1.3363 -2.47353,2.76999 -2.9707,5.25586 a 1.50015,1.50015 0 1 0 2.9414,0.58984 c 0.37009,-1.85045 0.99513,-2.60285 2.0293,-3.6289 1.03417,1.02605 1.65921,1.77845 2.0293,3.6289 a 1.50015,1.50015 0 1 0 2.9414,-0.58984 c -0.49717,-2.48587 -1.65087,-3.91956 -2.9707,-5.25586 V 436 h 3.48047 a 1.50015,1.50015 0 1 0 0,-3 h -2.53711 c -0.0387,0.18925 -0.094,0.37697 -0.17774,0.55664 C 162.35553,434.4361 161.47038,435 160.5,435 a 0.50005,0.50005 0 1 1 0,-1 1.5,1.5 0 0 0 0.41406,-0.0586 c 0.009,-0.002 0.0169,-0.005 0.0254,-0.008 a 1.5,1.5 0 0 0 0.35157,-0.16211 c 0.006,-0.004 0.0133,-0.006 0.0195,-0.01 a 1.5,1.5 0 0 0 0.004,-0.002 1.5,1.5 0 0 0 0.29102,-0.25 c 0.009,-0.0103 0.0202,-0.0187 0.0293,-0.0293 a 1.5,1.5 0 0 0 0.21484,-0.33008 c 0.003,-0.006 0.007,-0.01 0.01,-0.0156 0.002,-0.005 0.004,-0.0104 0.006,-0.0156 A 1.5,1.5 0 0 0 162,432.5 1.5,1.5 0 0 0 160.5,431 Z" id="path13634" inkscape:connector-curvature="0" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <path @@ -9335,7 +9335,7 @@ style="display:inline;fill:#ffffff;enable-background:new" transform="rotate(-180,307.00525,417)" id="g13597" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9352,7 +9352,7 @@ height="16" x="488.00128" y="430.00018" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <g @@ -9370,7 +9370,7 @@ style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.14285719;enable-background:new" id="g13938" transform="matrix(0.875,0,0,0.875,-254.625,-304.87495)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -9385,7 +9385,7 @@ transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g14058" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9468,7 +9468,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g14256" transform="translate(-21.000002,4.4999696e-6)" style="display:inline;opacity:0.4;fill:#ffffff;enable-background:new"> @@ -9498,7 +9498,7 @@ transform="matrix(-1,0,0,1,1290,302.99979)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g8530-0" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -9789,7 +9789,7 @@ transform="translate(0.99996615,4.4999696e-6)" id="g13708" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -10339,7 +10339,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g13337" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" transform="matrix(-1,0,0,1,1458,302.99979)"> @@ -10423,7 +10423,7 @@ id="g13022" transform="translate(-42.00718,397.99283)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -10473,7 +10473,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g13304" transform="translate(-84.000015,-126)"> @@ -10492,7 +10492,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g13384" transform="translate(-21.000002,-105)" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"> @@ -10603,7 +10603,7 @@ style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" id="g13366" transform="translate(760.99456,-488.99997)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -10708,7 +10708,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g13834" transform="rotate(90,244,438.00001)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -10758,7 +10758,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g13609" transform="translate(-187,-89.999995)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -10771,7 +10771,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g10909" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" transform="matrix(-1,0,0,1,1290,262.99979)"> @@ -10983,7 +10983,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(188,-63)" id="g20817" style="fill:#ffffff" /> @@ -11006,7 +11006,7 @@ <g id="g21026" transform="translate(188,-63)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" style="fill:#ffffff"> @@ -11021,7 +11021,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-84.000002,-62.999995)" id="g21409"> <path @@ -11036,7 +11036,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-21.000001)" id="g12839"> <path @@ -11075,7 +11075,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(418)" id="g19647" /> </g> @@ -11088,7 +11088,7 @@ transform="translate(-1.8536743e-6,3.4999696e-6)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g20495" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> <g @@ -11110,7 +11110,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g20538" transform="rotate(-180,317.50525,417)"> <path @@ -11170,7 +11170,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(422.00881,-131.00682)" id="g22132"> <path @@ -11365,7 +11365,7 @@ <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" sodipodi:nodetypes="ccccc" id="path22236" d="m 363.5,308.5 3,-3 h 6 l -3,3 z" @@ -11541,7 +11541,7 @@ d="m 153,284 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m -6,8 v -2 h -2 v 2 z m 0,-2 h 2 v -2 h -2 z m 0,-2 v -2 h -2 v 2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m -2,2 h -2 v 2 h 2 z" id="path24240" inkscape:connector-curvature="0" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <path @@ -11564,7 +11564,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="rotate(90,171,281.00001)" id="g24322" style="display:inline;fill:#ffffff;enable-background:new"> @@ -11965,7 +11965,7 @@ cx="-443" cy="1608" r="1.5" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> </g> @@ -11984,7 +11984,7 @@ cx="359" cy="-1613.0002" r="1.5" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="scale(-1)" /> @@ -12004,7 +12004,7 @@ cx="-406" cy="-1613.0002" r="1.5" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="scale(1,-1)" /> @@ -12022,7 +12022,7 @@ <circle inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" r="1.5" cy="1608" cx="-443" @@ -12043,7 +12043,7 @@ transform="scale(1,-1)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" r="1.5" cy="-1613.0002" cx="-406" @@ -12214,7 +12214,7 @@ style="display:inline;fill:#ffffff;enable-background:new" transform="rotate(-180,349.00525,417)" id="g22180" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -12300,7 +12300,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="matrix(0,-1,-1,0,558.00846,761.00467)" id="g22540" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> @@ -12338,7 +12338,7 @@ style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" id="g22761" transform="matrix(0,-1,-1,0,554.00846,765.00467)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -12502,7 +12502,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-21.000002,42.000006)" id="g12626" style="display:inline;fill:#ffffff;enable-background:new"> @@ -12527,7 +12527,7 @@ transform="translate(-21.000002,4.4999696e-6)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" id="g12548"> <g @@ -12555,7 +12555,7 @@ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 49,558 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z" id="path10767" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> <path @@ -12591,7 +12591,7 @@ cx="132" style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="circle44389-4" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" transform="matrix(-0.248353,0.02816779,0.02830718,0.248422,140.45214,86.01031)" /> @@ -12635,7 +12635,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g13692-5-0" transform="translate(316.0071,-315)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -12716,7 +12716,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g12049-3-5" transform="translate(126,64.00005)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"> @@ -12838,7 +12838,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g15178-7" style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,580.8635,617.75914)"> @@ -12875,7 +12875,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(555.01703,519.07892)" id="g12701-3-4" style="display:inline;fill:#ffffff;enable-background:new" /> @@ -12992,7 +12992,7 @@ id="g15520" transform="translate(231.99999,-397.99995)" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13006,7 +13006,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.25111365;enable-background:new" transform="matrix(-0.79928788,0,0,0.79928788,686.43544,-75.73586)" id="g12909-3"> @@ -13043,7 +13043,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-20,168)" id="g15951-6" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> @@ -13111,7 +13111,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g8419-9" transform="translate(1279.001,-241)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -13151,7 +13151,7 @@ <g style="display:inline;fill:#ffffff;enable-background:new" id="g23051-0" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="translate(210,20.999991)"> @@ -13166,7 +13166,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g22966-4" transform="translate(-504,167.99288)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> @@ -13222,7 +13222,7 @@ transform="translate(147)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g12973-3-2" style="display:inline;fill:#ffffff;enable-background:new"> <path @@ -13236,7 +13236,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g16957-2" transform="rotate(90,380.00189,176.00657)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13269,7 +13269,7 @@ transform="rotate(90,243.5,333.5)" id="g12586" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13293,7 +13293,7 @@ transform="translate(-21.00225)" style="display:inline;fill:#ffffff;stroke:#ffffff;enable-background:new" id="g13169-8-6" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13358,7 +13358,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12626-8" transform="translate(726.00003,-499.00001)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13392,7 +13392,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g15951-6-3" transform="translate(746.99995,-478)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13425,7 +13425,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g7406-1-2-5" transform="translate(347.99997,-290.00356)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> @@ -13501,7 +13501,7 @@ id="g8734" transform="translate(231.99999,-418.99995)" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13584,7 +13584,7 @@ transform="translate(-1.8554137e-6,5.18e-5)" style="display:inline;fill:#ffffff;enable-background:new" id="g13451" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -13607,7 +13607,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g13993" transform="translate(-21.000002,-20.999948)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13647,7 +13647,7 @@ transform="matrix(1,0,0,-1,-167.9929,1043.9931)" id="g17666-2" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -13718,7 +13718,7 @@ transform="matrix(-1,0,0,1,1689,365.99979)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g8530-0-8" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13756,7 +13756,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="matrix(0.866668,0,0,0.866668,-9.46699,121.39943)" id="g5914" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new"> @@ -13778,7 +13778,7 @@ <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="path5916" d="m 49,558 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" @@ -13829,7 +13829,7 @@ transform="matrix(-1,0,0,1,1290,764.99979)" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" id="g8530-0-8-3" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13855,7 +13855,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g6348" transform="translate(41.999953,147)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -13878,7 +13878,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g6359" transform="rotate(90,306.5,333.5)"> @@ -13923,7 +13923,7 @@ id="g8734-0" transform="translate(-104.00001,-19.99995)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14133,7 +14133,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="matrix(0.93036376,0,0,1.0023904,215.63778,150.90833)" id="g19530" style="display:inline;fill:#ffffff;stroke-width:1.03551209;enable-background:new"> @@ -14170,7 +14170,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12998" transform="translate(1.1628419e-6,-21)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14198,7 +14198,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12986" transform="translate(1.1628419e-6,-21)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14221,7 +14221,7 @@ transform="translate(1.1628419e-6)" style="display:inline;fill:#ffffff;enable-background:new" id="g13014" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14253,7 +14253,7 @@ style="fill:#ffffff" id="g12942" transform="translate(-20,18)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14315,7 +14315,7 @@ transform="matrix(0.86666667,0,0,0.86666667,39.533341,-302.8)" id="g12476-7-0" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384614;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14339,7 +14339,7 @@ style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384614;enable-background:new" id="g12520-1-5" transform="matrix(0.86666667,0,0,0.86666667,60.533341,-302.8)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14357,7 +14357,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g5294-1-7-1" transform="translate(41.999998,-357)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14394,7 +14394,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g20623" transform="translate(-740.00001,-750)" style="display:inline;fill:#ffffff;enable-background:new"> @@ -14419,7 +14419,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(760.99456,-488.99997)" id="g11317-7" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"> @@ -14510,7 +14510,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="matrix(0,1,1,0,-94.00249,680.99203)" id="g20878-5" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"> @@ -14576,7 +14576,7 @@ transform="translate(315,-0.999996)" id="g13630-2" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -14664,7 +14664,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="matrix(-1,0,0,1,970.03864,-190)" id="g19901" style="display:inline;fill:#ffffff;enable-background:new"> @@ -15061,7 +15061,7 @@ d="m 240.51382,409.98613 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -3,3 a 0.50005,0.50005 0 1 0 0.707,0.707 l 3,-3 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m 5,0 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -8,8 a 0.50005,0.50005 0 1 0 0.707,0.707 l 8,-8 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m 5,0 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -4.416,4.416 c 0.2729,0.1952 0.5118,0.4341 0.707,0.707 l 4.416,-4.416 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m 0,5 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -8,8 a 0.50005,0.50005 0 1 0 0.707,0.707 l 8,-8 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m -6.5059,1.0059 a 1.0000001,1 0 0 0 -1,1 1.0000001,1 0 0 0 1,1 1.0000001,1 0 0 0 1,-1 1.0000001,1 0 0 0 -1,-1 z m -2.4375,2.7305 -4.416,4.416 a 0.50005,0.50005 0 1 0 0.707,0.707 l 4.416,-4.416 c -0.2729,-0.1952 -0.5118,-0.4341 -0.707,-0.707 z m 8.9434,1.2636 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -3,3 a 0.50005,0.50005 0 1 0 0.707,0.707 l 3,-3 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z" id="path21556-6" inkscape:connector-curvature="0" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\path21556-6.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="115" inkscape:export-ydpi="115" /> <g @@ -15172,7 +15172,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(0.00711,-0.00712)" id="g26453-0"> <path @@ -15191,7 +15191,7 @@ <g style="display:inline;fill:#ffffff;enable-background:new" id="g26527-9" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="matrix(0,-1,-1,0,220.01421,219.98576)"> @@ -15216,7 +15216,7 @@ transform="translate(-252.00673,-707.99218)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g26501-5" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -15274,7 +15274,7 @@ transform="translate(-189.96252,-708.00986)" id="g26513-4" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -15294,7 +15294,7 @@ style="display:inline;fill:#ffffff;enable-background:new" id="g12992" transform="translate(2.6297176e-6,-20.999997)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -15444,7 +15444,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" id="g13935-4" transform="translate(83.999996,42)"> <path @@ -15536,7 +15536,7 @@ transform="translate(876,-1690)" style="display:inline;fill:#ffffff;enable-background:new" id="g24686-1" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Dysk Google\PROJEKTY BIEŻĄCE - Andrzej\BLENDER 2.8 ICONS redesign\MOCKUPS\gizmo icon_1.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -15608,7 +15608,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-105,-20.999997)" id="g24881" style="display:inline;fill:#ffffff;enable-background:new"> @@ -16003,7 +16003,7 @@ transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,559.86353,322.75914)" style="display:inline;opacity:1;fill:#5fd38d;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" id="g10335" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -16090,7 +16090,7 @@ id="g10367" transform="translate(115.99999,-73.00002)" style="display:inline;opacity:0.6;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -16524,7 +16524,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;enable-background:new" id="g13408-5" transform="translate(-357.00711,41.992878)"> @@ -16605,7 +16605,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-230.99288,-230.99288)" id="g27963" style="display:inline;opacity:1;fill:#ffffff;enable-background:new"> @@ -16674,7 +16674,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g28075-6" transform="rotate(-180,339.00356,333)"> @@ -16699,7 +16699,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" style="display:inline;opacity:1;stroke:#ffffff;enable-background:new" id="g28228" transform="translate(-0.99999996)"> @@ -16733,7 +16733,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(-1.031325,-21.999745)" style="display:inline;opacity:1;enable-background:new" id="g8671-6"> @@ -16831,7 +16831,7 @@ id="g29100" transform="translate(294.99999,-377.99995)" style="display:inline;opacity:1;stroke:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -16851,7 +16851,7 @@ inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" + inkscape:export-filename="blender_icons.png" id="path29102" d="m 460,120.50004 0.5,2e-5 v 9 h -9 L 451.49999,129" style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" @@ -16861,7 +16861,7 @@ style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" d="m 458,118.50004 0.5,2e-5 v 9 h -9 L 449.49999,127" id="path29110" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:connector-curvature="0" /> @@ -16937,7 +16937,7 @@ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="translate(47.999998,90)" id="g28884" style="display:inline;opacity:1;enable-background:new"> @@ -17103,7 +17103,7 @@ style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g7388-6-3" transform="translate(457.49535,-616.1486)" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect @@ -17357,7 +17357,7 @@ transform="matrix(0.6740384,0,0,0.6740384,192.80592,-339.68227)" style="display:inline;opacity:0.99;fill:#ffffff;stroke-width:1.07692;enable-background:new" id="g8599-6-7" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -17382,7 +17382,7 @@ id="g15520-6-5" transform="translate(231.97182,-397.99995)" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -17414,7 +17414,7 @@ transform="matrix(0.6740384,0,0,0.6740384,192.80592,-339.68227)" style="display:inline;opacity:0.99;fill:#ffffff;stroke-width:1.07692;enable-background:new" id="g8599-6-7-2" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path @@ -17435,7 +17435,7 @@ transform="translate(19.000003)" id="g28228-3-3" style="display:inline;opacity:0.6;stroke:#ffffff;enable-background:new" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g @@ -17461,7 +17461,7 @@ style="display:inline;fill:#ffffff;enable-background:new" inkscape:export-ydpi="96" inkscape:export-xdpi="96" - inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-filename="blender_icons.png" transform="matrix(0.65914281,0,0,0.65914281,248.47102,-214.89549)" id="g12839-3-5"> <path diff --git a/release/datafiles/prvicons.svg b/release/datafiles/prvicons.svg index 371ee040186..baca4597d98 100644 --- a/release/datafiles/prvicons.svg +++ b/release/datafiles/prvicons.svg @@ -144,16513 +144,6 @@ </sodipodi:namedview> <defs id="defs4"> - <linearGradient - id="linearGradient30958"> - <stop - style="stop-color:#fff9cf;stop-opacity:1;" - offset="0" - id="stop30960" /> - <stop - style="stop-color:#c7bc52;stop-opacity:1;" - offset="1" - id="stop30962" /> - </linearGradient> - <linearGradient - id="linearGradient29312" - inkscape:collect="always"> - <stop - id="stop29314" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop29316" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient29304"> - <stop - id="stop29306" - offset="0" - style="stop-color:#11233f;stop-opacity:1;" /> - <stop - id="stop29308" - offset="1" - style="stop-color:#162d50;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient27896" - inkscape:collect="always"> - <stop - id="stop27898" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop27900" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient27854" - inkscape:collect="always"> - <stop - id="stop27856" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop27858" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient24343"> - <stop - style="stop-color:#184990;stop-opacity:1;" - offset="0" - id="stop24345" /> - <stop - style="stop-color:#c1d5f3;stop-opacity:1;" - offset="1" - id="stop24347" /> - </linearGradient> - <linearGradient - id="linearGradient25417"> - <stop - style="stop-color:#60553b;stop-opacity:1;" - offset="0" - id="stop25419" /> - <stop - style="stop-color:#b0a17f;stop-opacity:1;" - offset="1" - id="stop25421" /> - </linearGradient> - <linearGradient - id="linearGradient25108"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop25110" /> - <stop - style="stop-color:#c6c6c6;stop-opacity:1;" - offset="1" - id="stop25112" /> - </linearGradient> - <linearGradient - id="linearGradient43807"> - <stop - id="stop43809" - offset="0" - style="stop-color:#e31b1b;stop-opacity:1;" /> - <stop - id="stop43811" - offset="1" - style="stop-color:#930000;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient38845" - inkscape:collect="always"> - <stop - id="stop38847" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop38849" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient38831"> - <stop - id="stop38833" - offset="0" - style="stop-color:#182b42;stop-opacity:1;" /> - <stop - style="stop-color:#598ac7;stop-opacity:1;" - offset="0.38971797" - id="stop38836" /> - <stop - id="stop38838" - offset="1" - style="stop-color:#f1f1f1;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient38256"> - <stop - style="stop-color:#e7e0c7;stop-opacity:1;" - offset="0" - id="stop38258" /> - <stop - style="stop-color:#f1eddf;stop-opacity:0;" - offset="1" - id="stop38260" /> - </linearGradient> - <linearGradient - id="linearGradient71814"> - <stop - id="stop71816" - offset="0" - style="stop-color:#6e0d00;stop-opacity:1;" /> - <stop - id="stop71818" - offset="1" - style="stop-color:#6f2913;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient37667"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop37669" /> - <stop - style="stop-color:black;stop-opacity:0" - offset="1" - id="stop37671" /> - </linearGradient> - <linearGradient - id="linearGradient39080"> - <stop - id="stop39082" - offset="0" - style="stop-color:#1a2a3d;stop-opacity:1;" /> - <stop - style="stop-color:#95b0d1;stop-opacity:1;" - offset="0.5" - id="stop39084" /> - <stop - id="stop39086" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient40809"> - <stop - id="stop40811" - offset="0" - style="stop-color:#0059d7;stop-opacity:1;" /> - <stop - id="stop40813" - offset="1" - style="stop-color:#b7d4ff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient40703"> - <stop - id="stop40705" - offset="0" - style="stop-color:#143564;stop-opacity:1;" /> - <stop - id="stop40707" - offset="1" - style="stop-color:#c1d7f8;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient37925"> - <stop - style="stop-color:#e7cbab;stop-opacity:1;" - offset="0" - id="stop37927" /> - <stop - style="stop-color:#af7333;stop-opacity:1;" - offset="1" - id="stop37929" /> - </linearGradient> - <linearGradient - id="linearGradient36273"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop36275" /> - <stop - style="stop-color:#ffffff;stop-opacity:1" - offset="1" - id="stop36277" /> - </linearGradient> - <linearGradient - id="linearGradient35411"> - <stop - style="stop-color:#2b5385;stop-opacity:1;" - offset="0" - id="stop35414" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop35416" /> - </linearGradient> - <linearGradient - id="linearGradient31356"> - <stop - style="stop-color:#1a1a1a;stop-opacity:1" - offset="0" - id="stop31358" /> - <stop - style="stop-color:#1a1a1a;stop-opacity:0;" - offset="1" - id="stop31360" /> - </linearGradient> - <radialGradient - r="3.779551" - fy="81.396774" - fx="256.49512" - cy="81.396774" - cx="256.49512" - gradientTransform="matrix(0.7228842,8.5733105e-8,-9.4831885e-8,0.7995973,71.917045,14.582004)" - gradientUnits="userSpaceOnUse" - id="radialGradient28107" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="427.01648" - x2="885.04938" - y1="422.77902" - x1="875.73486" - gradientUnits="userSpaceOnUse" - id="linearGradient28105" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="429.23453" - x2="881.01172" - y1="422.09964" - x1="873.09998" - gradientUnits="userSpaceOnUse" - id="linearGradient28103" - xlink:href="#linearGradient28887" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.20651" - fx="76.180473" - cy="500.20651" - cx="76.180473" - gradientTransform="matrix(1.6572588,1.2500456,-1.6473175,2.2058465,774.83033,-697.31982)" - gradientUnits="userSpaceOnUse" - id="radialGradient28101" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient28099" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <linearGradient - id="linearGradient28887"> - <stop - id="stop28889" - offset="0" - style="stop-color:#2158a7;stop-opacity:1;" /> - <stop - id="stop28891" - offset="1" - style="stop-color:#2f73d5;stop-opacity:0.19607843;" /> - </linearGradient> - <linearGradient - y2="251.71078" - x2="226.625" - y1="238" - x1="209" - gradientUnits="userSpaceOnUse" - id="linearGradient44421" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="251.71078" - x2="226.625" - y1="238" - x1="209" - gradientUnits="userSpaceOnUse" - id="linearGradient44557" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - id="linearGradient24168"> - <stop - style="stop-color:#182437;stop-opacity:1;" - offset="0" - id="stop24170" /> - <stop - style="stop-color:#2b4163;stop-opacity:0;" - offset="1" - id="stop24172" /> - </linearGradient> - <linearGradient - id="linearGradient24144"> - <stop - style="stop-color:#3d361a;stop-opacity:1;" - offset="0" - id="stop24146" /> - <stop - id="stop24148" - offset="0.17958513" - style="stop-color:#d1c595;stop-opacity:1;" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop24150" /> - </linearGradient> - <linearGradient - id="linearGradient24101"> - <stop - id="stop24103" - offset="0" - style="stop-color:#643400;stop-opacity:1;" /> - <stop - style="stop-color:#ed983d;stop-opacity:1;" - offset="0.22606115" - id="stop24105" /> - <stop - id="stop24107" - offset="1" - style="stop-color:#fff0d5;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24081"> - <stop - style="stop-color:#b45d00;stop-opacity:1;" - offset="0" - id="stop24083" /> - <stop - id="stop24085" - offset="0.3167825" - style="stop-color:#ff982a;stop-opacity:1;" /> - <stop - style="stop-color:#ffedd5;stop-opacity:1;" - offset="1" - id="stop24087" /> - </linearGradient> - <linearGradient - id="linearGradient23302"> - <stop - style="stop-color:#b45d00;stop-opacity:1;" - offset="0" - id="stop23304" /> - <stop - id="stop23306" - offset="0.39332664" - style="stop-color:#ff982a;stop-opacity:1;" /> - <stop - style="stop-color:#ffedd5;stop-opacity:1;" - offset="1" - id="stop23308" /> - </linearGradient> - <linearGradient - id="linearGradient24727"> - <stop - id="stop24729" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.77520341" - id="stop24731" /> - <stop - id="stop24733" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24711"> - <stop - id="stop24713" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.21609697" - id="stop24715" /> - <stop - id="stop24717" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24695"> - <stop - id="stop24697" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.60401857" - id="stop24699" /> - <stop - id="stop24701" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24687"> - <stop - id="stop24689" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.59630167" - id="stop24691" /> - <stop - id="stop24693" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24679"> - <stop - id="stop24681" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.45537567" - id="stop24683" /> - <stop - id="stop24685" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24671"> - <stop - id="stop24673" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.29527253" - id="stop24675" /> - <stop - id="stop24677" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient23705"> - <stop - style="stop-color:#d4d2bf;stop-opacity:1;" - offset="0" - id="stop23707" /> - <stop - style="stop-color:#857f5d;stop-opacity:1;" - offset="1" - id="stop23709" /> - </linearGradient> - <linearGradient - id="linearGradient23906"> - <stop - style="stop-color:#ff921d;stop-opacity:1;" - offset="0" - id="stop23908" /> - <stop - style="stop-color:#ffa751;stop-opacity:0;" - offset="1" - id="stop23910" /> - </linearGradient> - <linearGradient - id="linearGradient42459"> - <stop - id="stop42461" - offset="0" - style="stop-color:#e7dfab;stop-opacity:1;" /> - <stop - id="stop42463" - offset="1" - style="stop-color:#af9d33;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="-271.9375" - x2="-281.4375" - y1="-276.1875" - x1="-287" - gradientTransform="translate(744,397)" - gradientUnits="userSpaceOnUse" - id="linearGradient41723" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="244.96393" - x2="170.20523" - y1="259.71194" - x1="171.42436" - gradientTransform="matrix(0.695652,0,0,0.869703,342.06514,-90.66358)" - gradientUnits="userSpaceOnUse" - id="linearGradient41721" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="179.12285" - x2="425" - y1="179.12074" - x1="426.12415" - gradientUnits="userSpaceOnUse" - id="linearGradient24246" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="266.34406" - x2="237.75459" - y1="283.63254" - x1="246.12868" - gradientTransform="translate(186,-105)" - gradientUnits="userSpaceOnUse" - id="linearGradient24244" - xlink:href="#linearGradient24143" - inkscape:collect="always" /> - <linearGradient - y2="-271.35284" - x2="-282.59851" - y1="-276.71042" - x1="-287.56247" - gradientTransform="translate(744,397)" - gradientUnits="userSpaceOnUse" - id="linearGradient24278" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.58694" - x2="170.9689" - y1="266.7905" - x1="190.33647" - gradientTransform="matrix(0.695652,0,0,0.869703,342.06514,-90.66358)" - gradientUnits="userSpaceOnUse" - id="linearGradient24276" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - id="linearGradient24143"> - <stop - style="stop-color:#3d361a;stop-opacity:1;" - offset="0" - id="stop24145" /> - <stop - id="stop24669" - offset="0.5" - style="stop-color:#d1c595;stop-opacity:1;" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop24147" /> - </linearGradient> - <linearGradient - y2="260.21841" - x2="116.37123" - y1="281.26645" - x1="120.2969" - gradientTransform="matrix(1.043478,0,0,0.956667,304.84783,-86.57833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24238" - xlink:href="#linearGradient24687" - inkscape:collect="always" /> - <linearGradient - id="linearGradient24642"> - <stop - id="stop24644" - offset="0" - style="stop-color:#d0dbe8;stop-opacity:1;" /> - <stop - id="stop24646" - offset="1" - style="stop-color:#6ca3e9;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient24632"> - <stop - id="stop24634" - offset="0" - style="stop-color:#28394f;stop-opacity:1;" /> - <stop - style="stop-color:#0d386a;stop-opacity:0.78431374;" - offset="0.17637014" - id="stop24636" /> - <stop - style="stop-color:#18437d;stop-opacity:0.47058824;" - offset="0.35274029" - id="stop24638" /> - <stop - id="stop24640" - offset="1" - style="stop-color:#154e94;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="6.6750002" - fy="294.60239" - fx="-0.10810681" - cy="294.60239" - cx="-0.10810681" - gradientTransform="matrix(0.9934369,-0.1143813,0.1033636,0.8977446,-30.451879,30.134649)" - gradientUnits="userSpaceOnUse" - id="radialGradient23167" - xlink:href="#linearGradient22562" - inkscape:collect="always" /> - <linearGradient - y2="245" - x2="24.25" - y1="245" - x1="22.75" - gradientTransform="translate(-61)" - gradientUnits="userSpaceOnUse" - id="linearGradient23201" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="245" - x2="24.5" - y1="245" - x1="22.75" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient23199" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="272" - y1="388" - x1="257.75" - gradientTransform="translate(-46.000005,-117)" - gradientUnits="userSpaceOnUse" - id="linearGradient24208" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="279" - y1="388" - x1="258.52756" - gradientTransform="translate(-54.000005,-120)" - gradientUnits="userSpaceOnUse" - id="linearGradient24206" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="273" - y1="388" - x1="259.75" - gradientTransform="translate(-48.983883,-126)" - gradientUnits="userSpaceOnUse" - id="linearGradient24204" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="273" - y1="388" - x1="258" - gradientTransform="translate(-52.983883,-129)" - gradientUnits="userSpaceOnUse" - id="linearGradient24202" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="126.57021" - x2="139.86742" - y1="110.87843" - x1="126.37032" - gradientUnits="userSpaceOnUse" - id="linearGradient23379" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="117.24104" - x2="131.3092" - y1="124.67203" - x1="137.88235" - gradientUnits="userSpaceOnUse" - id="linearGradient23377" - xlink:href="#linearGradient15437" - inkscape:collect="always" /> - <linearGradient - y2="103.57072" - x2="44.999863" - y1="96.767769" - x1="52.06274" - gradientTransform="matrix(0.9995363,0,0,-1.0036971,220.01067,167.35026)" - gradientUnits="userSpaceOnUse" - id="linearGradient23375" - xlink:href="#linearGradient13938" - inkscape:collect="always" /> - <linearGradient - y2="121.20407" - x2="133.88583" - y1="108.82882" - x1="122.38876" - gradientUnits="userSpaceOnUse" - id="linearGradient23373" - xlink:href="#linearGradient14232" - inkscape:collect="always" /> - <linearGradient - id="linearGradient23974"> - <stop - style="stop-color:#2561b7;stop-opacity:1;" - offset="0" - id="stop23976" /> - <stop - style="stop-color:#f9fbff;stop-opacity:1" - offset="1" - id="stop23978" /> - </linearGradient> - <linearGradient - id="linearGradient40983"> - <stop - id="stop40985" - offset="0" - style="stop-color:#6a9ae0;stop-opacity:1;" /> - <stop - id="stop40987" - offset="1" - style="stop-color:#5189db;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="126.72997" - x2="140.72693" - y1="112.12571" - x1="127.60629" - gradientUnits="userSpaceOnUse" - id="linearGradient23280" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="119.54019" - x2="132.46898" - y1="110.86718" - x1="125.01582" - gradientUnits="userSpaceOnUse" - id="linearGradient23278" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="118.34238" - x2="131.71249" - y1="126.3454" - x1="139.37782" - gradientUnits="userSpaceOnUse" - id="linearGradient23276" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="117.10313" - x2="130.10634" - y1="132.15414" - x1="144.8255" - gradientUnits="userSpaceOnUse" - id="linearGradient23274" - xlink:href="#linearGradient14418" - inkscape:collect="always" /> - <radialGradient - gradientUnits="userSpaceOnUse" - fy="114.5684" - fx="20.892099" - r="5.256" - cy="114.5684" - cx="20.892099" - id="aigrd2"> - <stop - id="stop15566" - style="stop-color:#F0F0F0" - offset="0" /> - <stop - id="stop15568" - style="stop-color:#9a9a9a;stop-opacity:1.0000000;" - offset="1.0000000" /> - </radialGradient> - <linearGradient - id="linearGradient58334"> - <stop - style="stop-color:#ffffff;stop-opacity:0.87628865;" - offset="0.0000000" - id="stop58336" /> - <stop - style="stop-color:#fffffe;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop58338" /> - </linearGradient> - <linearGradient - id="linearGradient8864"> - <stop - style="stop-color:#b43214;stop-opacity:1;" - offset="0" - id="stop8866" /> - <stop - style="stop-color:#e86830;stop-opacity:1;" - offset="1" - id="stop8868" /> - </linearGradient> - <linearGradient - id="linearGradient20324"> - <stop - style="stop-color:#35241b;stop-opacity:1;" - offset="0" - id="stop20326" /> - <stop - id="stop20328" - offset="0.17637014" - style="stop-color:#69390e;stop-opacity:0.8392157;" /> - <stop - id="stop20330" - offset="0.35274029" - style="stop-color:#6c5b15;stop-opacity:0.67843139;" /> - <stop - style="stop-color:#947b15;stop-opacity:0;" - offset="1" - id="stop20332" /> - </linearGradient> - <linearGradient - id="linearGradient37623"> - <stop - style="stop-color:#e5e1ca;stop-opacity:1;" - offset="0" - id="stop37625" /> - <stop - style="stop-color:#d6ca22;stop-opacity:0;" - offset="1" - id="stop37627" /> - </linearGradient> - <linearGradient - id="linearGradient36116" - inkscape:collect="always"> - <stop - id="stop36118" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop36120" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="133.14267" - x2="117.29694" - y1="116.00471" - x1="133.94305" - gradientUnits="userSpaceOnUse" - id="linearGradient22852" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="118.00132" - x2="129.70895" - y1="125.87247" - x1="136.55727" - gradientUnits="userSpaceOnUse" - id="linearGradient22850" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="75.5" - x2="424.75217" - y1="77.44017" - x1="441.98615" - gradientTransform="translate(0.01387)" - gradientUnits="userSpaceOnUse" - id="linearGradient22896" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="75.5" - x2="424.75217" - y1="78" - x1="438.61115" - gradientTransform="translate(0.01387)" - gradientUnits="userSpaceOnUse" - id="linearGradient22846" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="75.5" - x2="424.75217" - y1="77" - x1="437.98615" - gradientTransform="translate(0.01387)" - gradientUnits="userSpaceOnUse" - id="linearGradient22844" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient22562"> - <stop - id="stop22564" - offset="0" - style="stop-color:#001e50;stop-opacity:1;" /> - <stop - id="stop22566" - offset="1" - style="stop-color:#1e3e70;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="276.92188" - x2="23.25" - y1="277" - x1="28.4375" - gradientTransform="translate(399.01387,-202)" - gradientUnits="userSpaceOnUse" - id="linearGradient22842" - xlink:href="#linearGradient22562" - inkscape:collect="always" /> - <linearGradient - id="linearGradient22556"> - <stop - style="stop-color:#6a9bef;stop-opacity:1" - offset="0" - id="stop22558" /> - <stop - id="stop22568" - offset="0.77941167" - style="stop-color:#bccee8;stop-opacity:0.58450705;" /> - <stop - style="stop-color:#ccdaed;stop-opacity:0;" - offset="1" - id="stop22560" /> - </linearGradient> - <linearGradient - y2="38.088879" - x2="199.27217" - y1="38.088879" - x1="210.08989" - gradientTransform="matrix(0.785748,0,0,0.78488,265.93616,46.1048)" - gradientUnits="userSpaceOnUse" - id="linearGradient22840" - xlink:href="#linearGradient22556" - inkscape:collect="always" /> - <radialGradient - r="8" - fy="77.3125" - fx="430.00003" - cy="77.3125" - cx="430.00003" - gradientTransform="matrix(0.8128508,0,0,0.8128508,80.474142,14.46897)" - gradientUnits="userSpaceOnUse" - id="radialGradient22838" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="285" - x2="31.538462" - y1="285" - x1="24" - gradientTransform="matrix(1.1929722,0,0,0.5,-462.63135,-59)" - gradientUnits="userSpaceOnUse" - id="linearGradient22848" - xlink:href="#linearGradient22882" - inkscape:collect="always" /> - <linearGradient - id="linearGradient22882"> - <stop - id="stop22884" - offset="0" - style="stop-color:#323232;stop-opacity:0;" /> - <stop - style="stop-color:#323232;stop-opacity:0.49803922;" - offset="0.21233012" - id="stop22886" /> - <stop - style="stop-color:#323232;stop-opacity:1;" - offset="0.54086536" - id="stop22888" /> - <stop - id="stop22890" - offset="0.83381736" - style="stop-color:#323232;stop-opacity:0.49803922;" /> - <stop - id="stop22892" - offset="1" - style="stop-color:#323232;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="285" - x2="31.498274" - y1="285" - x1="23.959812" - gradientTransform="matrix(1.0369025,0,0,1.5,-458.38567,-344)" - gradientUnits="userSpaceOnUse" - id="linearGradient22880" - xlink:href="#linearGradient22882" - inkscape:collect="always" /> - <linearGradient - id="linearGradient35407"> - <stop - style="stop-color:#a17306;stop-opacity:1;" - offset="0" - id="stop35409" /> - <stop - id="stop35411" - offset="0.43277758" - style="stop-color:#cca649;stop-opacity:1;" /> - <stop - style="stop-color:#f9f5e9;stop-opacity:1;" - offset="1" - id="stop35413" /> - </linearGradient> - <linearGradient - id="linearGradient35391"> - <stop - style="stop-color:#322800;stop-opacity:1;" - offset="0" - id="stop35393" /> - <stop - style="stop-color:#6e4800;stop-opacity:0;" - offset="1" - id="stop35395" /> - </linearGradient> - <linearGradient - id="linearGradient34157" - inkscape:collect="always"> - <stop - id="stop34159" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop34161" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="26.027344" - x2="-25.5" - y1="36.828632" - x1="-25.5" - gradientTransform="translate(0,-18)" - gradientUnits="userSpaceOnUse" - id="linearGradient22457" - xlink:href="#linearGradient38256" - inkscape:collect="always" /> - <linearGradient - y2="340" - x2="343.26239" - y1="323" - x1="308" - gradientTransform="translate(-354,-314.00002)" - gradientUnits="userSpaceOnUse" - id="linearGradient22455" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="23.414351" - x2="-25.5" - y1="37" - x1="-27.299919" - gradientTransform="translate(0,-18)" - gradientUnits="userSpaceOnUse" - id="linearGradient22453" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient21609"> - <stop - style="stop-color:black;stop-opacity:1" - offset="0" - id="stop21611" /> - <stop - style="stop-color:white;stop-opacity:1;" - offset="1" - id="stop21613" /> - </linearGradient> - <linearGradient - y2="103.75" - x2="165" - y1="103.71875" - x1="162" - gradientUnits="userSpaceOnUse" - id="linearGradient20961" - xlink:href="#linearGradient21609" - inkscape:collect="always" /> - <linearGradient - y2="325" - x2="286.60001" - y1="323.80002" - x1="285.39999" - gradientUnits="userSpaceOnUse" - id="linearGradient32335" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="337.517" - x2="337.80573" - y1="323" - x1="308" - gradientTransform="translate(-157.00004,-233.00002)" - gradientUnits="userSpaceOnUse" - id="linearGradient22081" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient19900" - inkscape:collect="always"> - <stop - id="stop19902" - offset="0" - style="stop-color:#1a1a1a;stop-opacity:1;" /> - <stop - id="stop19904" - offset="1" - style="stop-color:#1a1a1a;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient18105"> - <stop - style="stop-color:#162d50;stop-opacity:1" - offset="0" - id="stop18107" /> - <stop - style="stop-color:#1e3e70;stop-opacity:0;" - offset="1" - id="stop18109" /> - </linearGradient> - <linearGradient - id="linearGradient18056"> - <stop - style="stop-color:#162d50;stop-opacity:1" - offset="0" - id="stop18058" /> - <stop - style="stop-color:#295498;stop-opacity:0.34057972;" - offset="1" - id="stop18060" /> - </linearGradient> - <linearGradient - id="linearGradient21327"> - <stop - id="stop21329" - offset="0" - style="stop-color:#1e3e70;stop-opacity:1;" /> - <stop - id="stop21331" - offset="1" - style="stop-color:#1e3e70;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient19625"> - <stop - style="stop-color:#2258a6;stop-opacity:1;" - offset="0" - id="stop19627" /> - <stop - style="stop-color:#c1d7f8;stop-opacity:1;" - offset="1" - id="stop19629" /> - </linearGradient> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="-40.000008" - x2="408.75" - y1="-35.483223" - x1="408.75" - id="linearGradient20217" - xlink:href="#linearGradient35391" - inkscape:collect="always" /> - <linearGradient - id="linearGradient18821"> - <stop - id="stop18823" - offset="0" - style="stop-color:#fc6b58;stop-opacity:1;" /> - <stop - id="stop18825" - offset="1" - style="stop-color:#fc6b58;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient22187" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - id="linearGradient29149"> - <stop - style="stop-color:#76adff;stop-opacity:1;" - offset="0" - id="stop29151" /> - <stop - style="stop-color:#a5c9ff;stop-opacity:0;" - offset="1" - id="stop29153" /> - </linearGradient> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient21820" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="2.9089756" - fy="503.81497" - fx="79.959885" - cy="503.81497" - cx="79.959885" - gradientTransform="matrix(1.4624192,0,0,1.4467089,-36.975824,-224.99718)" - gradientUnits="userSpaceOnUse" - id="radialGradient21818" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="501.04794" - x2="78.000008" - y1="511.42972" - x1="89.526657" - gradientUnits="userSpaceOnUse" - id="linearGradient21816" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="501.58331" - x2="76.885078" - y1="504.67188" - x1="80.768944" - gradientUnits="userSpaceOnUse" - id="linearGradient21814" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="492.15359" - fx="75.95578" - cy="492.15359" - cx="75.95578" - gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,321.60762,256.85923)" - gradientUnits="userSpaceOnUse" - id="radialGradient21741" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <linearGradient - y2="501.10059" - x2="41.311054" - y1="502.71924" - x1="88.874489" - gradientTransform="matrix(0.9281768,0,0,0.9971589,401.42265,-484.56523)" - gradientUnits="userSpaceOnUse" - id="linearGradient21773" - xlink:href="#linearGradient15809" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="54.8125" - y1="500" - x1="108" - gradientTransform="matrix(0.8666667,0,0,0.9166667,406.13333,-443.79167)" - gradientUnits="userSpaceOnUse" - id="linearGradient21776" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="499.99969" - fx="74.518959" - cy="499.99969" - cx="74.518959" - gradientTransform="matrix(0.8886193,0.8021825,-0.8051059,0.8972684,411.80247,-8.668512)" - gradientUnits="userSpaceOnUse" - id="radialGradient22166" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <radialGradient - r="2.9089756" - fy="503.81497" - fx="79.959885" - cy="503.81497" - cx="79.959885" - gradientTransform="matrix(1.4624192,0,0,1.4467089,-36.975824,-224.99718)" - gradientUnits="userSpaceOnUse" - id="radialGradient22164" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="501.04794" - x2="78.000008" - y1="511.42972" - x1="89.526657" - gradientUnits="userSpaceOnUse" - id="linearGradient22162" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="501.58331" - x2="76.885078" - y1="504.67188" - x1="80.768944" - gradientUnits="userSpaceOnUse" - id="linearGradient22160" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="492.15359" - fx="75.95578" - cy="492.15359" - cx="75.95578" - gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,321.60762,256.85923)" - gradientUnits="userSpaceOnUse" - id="radialGradient22158" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <linearGradient - y2="501.10059" - x2="41.311054" - y1="502.71924" - x1="88.874489" - gradientTransform="matrix(1,0,0,0.9971589,396,-484.56523)" - gradientUnits="userSpaceOnUse" - id="linearGradient22156" - xlink:href="#linearGradient15809" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="54.8125" - y1="500" - x1="108" - gradientTransform="matrix(0.8666667,0,0,0.9166667,406.13333,-443.79167)" - gradientUnits="userSpaceOnUse" - id="linearGradient22154" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - id="linearGradient16500" - inkscape:collect="always"> - <stop - id="stop16502" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient15809" - inkscape:collect="always"> - <stop - id="stop15811" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop15813" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient15437"> - <stop - style="stop-color:#20529e;stop-opacity:1;" - offset="0" - id="stop15439" /> - <stop - style="stop-color:#1d3f71;stop-opacity:0;" - offset="1" - id="stop15441" /> - </linearGradient> - <linearGradient - id="linearGradient15425"> - <stop - id="stop15427" - offset="0" - style="stop-color:#8c0000;stop-opacity:1;" /> - <stop - id="stop15429" - offset="1" - style="stop-color:#c80000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient14262"> - <stop - style="stop-color:#2661b6;stop-opacity:1;" - offset="0" - id="stop14264" /> - <stop - style="stop-color:#c1d7f8;stop-opacity:0;" - offset="1" - id="stop14266" /> - </linearGradient> - <linearGradient - id="linearGradient18344"> - <stop - id="stop18346" - offset="0" - style="stop-color:#6c6c6c;stop-opacity:1;" /> - <stop - id="stop18348" - offset="1" - style="stop-color:#f0f0f0;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient5060"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop5062" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop5064" /> - </linearGradient> - <linearGradient - id="linearGradient27957"> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="0" - id="stop27959" /> - <stop - id="stop27963" - offset="0.59290552" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop27961" /> - </linearGradient> - <linearGradient - id="linearGradient23647"> - <stop - id="stop23649" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop23651" - offset="1" - style="stop-color:black;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient23390"> - <stop - id="stop23392" - offset="0.0000000" - style="stop-color:#000000;stop-opacity:1.0000000" /> - <stop - id="stop23400" - offset="1.0000000" - style="stop-color:#ffffff;stop-opacity:1.0000000" /> - </linearGradient> - <linearGradient - id="linearGradient16359" - inkscape:collect="always"> - <stop - id="stop16361" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop16363" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="248.10277" - x2="388.35962" - y1="230.09529" - x1="386.09836" - gradientTransform="matrix(-1.207032,0,0,0.903901,679.26,-38.98429)" - gradientUnits="userSpaceOnUse" - id="linearGradient15746" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="248.24983" - x2="390.55936" - y1="229.34804" - x1="390.61163" - gradientTransform="matrix(-1.207032,0,0,0.903901,679.30638,-38.92179)" - gradientUnits="userSpaceOnUse" - id="linearGradient15744" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="248.55901" - x2="385.60632" - y1="225.94354" - x1="383.67041" - gradientTransform="matrix(-1.203777,0,0,0.903901,837.9645,-18.01568)" - gradientUnits="userSpaceOnUse" - id="linearGradient15683" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="247.83209" - x2="387.94211" - y1="230.5647" - x1="391.80222" - gradientTransform="matrix(-1.207032,0,0,0.903901,839.2424,-18.01568)" - gradientUnits="userSpaceOnUse" - id="linearGradient15681" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="126.19643" - x2="137.11284" - y1="112.31642" - x1="126.37006" - gradientUnits="userSpaceOnUse" - id="linearGradient13545" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient15878" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - id="linearGradient20756"> - <stop - id="stop20758" - offset="0" - style="stop-color:#932200;stop-opacity:1;" /> - <stop - id="stop20760" - offset="1" - style="stop-color:#f8420a;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="122.08995" - x2="134.94949" - y1="110.59049" - x1="126.45676" - gradientUnits="userSpaceOnUse" - id="linearGradient13543" - xlink:href="#linearGradient20756" - inkscape:collect="always" /> - <linearGradient - y2="118.5" - x2="235" - y1="118.5" - x1="228.5468" - gradientTransform="matrix(0,1.253963,1,0,169,-94.7765)" - gradientUnits="userSpaceOnUse" - id="linearGradient15693" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="121.88217" - x2="235.90916" - y1="109.00085" - x1="215.07817" - gradientTransform="matrix(1.222225,0,0,1,-87.33412,169)" - gradientUnits="userSpaceOnUse" - id="linearGradient15691" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="118.5" - x2="235" - y1="118.5" - x1="228.5468" - gradientTransform="matrix(0,1.253963,1,0,169,-94.7765)" - gradientUnits="userSpaceOnUse" - id="linearGradient15689" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="121" - x2="235.90916" - y1="107.25085" - x1="217.22589" - gradientTransform="matrix(1.222225,0,0,1,-87.33412,169)" - gradientUnits="userSpaceOnUse" - id="linearGradient15687" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="247.99632" - x2="393" - y1="234.59885" - x1="381.56296" - gradientUnits="userSpaceOnUse" - id="linearGradient15854" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="241.70195" - x2="385.88068" - y1="259.26602" - x1="399.987" - gradientTransform="matrix(0.8329616,0,0,0.8433415,58.576199,29.193917)" - gradientUnits="userSpaceOnUse" - id="linearGradient13639" - xlink:href="#linearGradient31456" - inkscape:collect="always" /> - <linearGradient - y2="250.9062" - x2="395.9375" - y1="244.5312" - x1="390.75" - gradientUnits="userSpaceOnUse" - id="linearGradient52023" - xlink:href="#linearGradient23178" - inkscape:collect="always" /> - <linearGradient - y2="241.70195" - x2="385.88068" - y1="257.4874" - x1="400.88739" - gradientTransform="matrix(0.8329616,0,0,0.8433415,58.576199,29.193917)" - gradientUnits="userSpaceOnUse" - id="linearGradient14661" - xlink:href="#linearGradient31456" - inkscape:collect="always" /> - <linearGradient - y2="247.83134" - x2="396.79285" - y1="241.86644" - x1="391.01859" - gradientUnits="userSpaceOnUse" - id="linearGradient52025" - xlink:href="#linearGradient23178" - inkscape:collect="always" /> - <linearGradient - y2="241.70195" - x2="385.88068" - y1="257.41327" - x1="399.08661" - gradientTransform="matrix(0.8329616,0,0,0.8433415,58.576199,29.193917)" - gradientUnits="userSpaceOnUse" - id="linearGradient15995" - xlink:href="#linearGradient31456" - inkscape:collect="always" /> - <linearGradient - y2="247.1562" - x2="393.4375" - y1="231.7812" - x1="381.5" - gradientUnits="userSpaceOnUse" - id="linearGradient15993" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="247.1562" - x2="393.4375" - y1="231.7812" - x1="381.5" - gradientUnits="userSpaceOnUse" - id="linearGradient15997" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - id="linearGradient47130"> - <stop - id="stop47132" - offset="0" - style="stop-color:#ed7b00;stop-opacity:1;" /> - <stop - id="stop47134" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="254.18553" - x2="339.84518" - y1="244.97151" - x1="329.28757" - gradientUnits="userSpaceOnUse" - id="linearGradient52027" - xlink:href="#linearGradient23178" - inkscape:collect="always" /> - <linearGradient - y2="248.68198" - x2="333.94208" - y1="234.63918" - x1="319.75095" - gradientUnits="userSpaceOnUse" - id="linearGradient15436" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - id="linearGradient32842"> - <stop - id="stop32844" - offset="0" - style="stop-color:#183e75;stop-opacity:1;" /> - <stop - id="stop32846" - offset="1" - style="stop-color:#1d3f71;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="6.1896501" - fy="826.77924" - fx="2357.1072" - cy="826.77924" - cx="2357.1072" - gradientTransform="matrix(2.2541045,-1.3755453,0.900369,1.4754358,-3699.4512,2858.7)" - gradientUnits="userSpaceOnUse" - id="radialGradient13900" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="21.94199" - x2="130.70599" - y1="18.44199" - x1="130.70599" - gradientTransform="translate(2226.9963,823)" - gradientUnits="userSpaceOnUse" - id="linearGradient38692" - xlink:href="#linearGradient40983" - inkscape:collect="always" /> - <linearGradient - y2="36.739578" - x2="331.44778" - y1="33.505165" - x1="328.38852" - gradientUnits="userSpaceOnUse" - id="linearGradient15717" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="37.468754" - x2="332.41409" - y1="25.109356" - x1="320.2735" - gradientUnits="userSpaceOnUse" - id="linearGradient15715" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="36.739578" - x2="331.44778" - y1="34.005215" - x1="329.18762" - gradientUnits="userSpaceOnUse" - id="linearGradient15713" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="41.875" - x2="337.3125" - y1="31.446384" - x1="326.483" - gradientTransform="translate(2.011921e-5,12.000013)" - gradientUnits="userSpaceOnUse" - id="linearGradient15711" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="31.22842" - x2="326.41843" - y1="38.166924" - x1="332.49747" - gradientUnits="userSpaceOnUse" - id="linearGradient15709" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="53.758793" - x2="343.5636" - y1="30.3883" - x1="323.37836" - gradientTransform="translate(2.011921e-5,12.000013)" - gradientUnits="userSpaceOnUse" - id="linearGradient15707" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-6.3206272" - x2="291.93054" - y1="-16.62501" - x1="279.00009" - gradientUnits="userSpaceOnUse" - id="linearGradient15646" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="263.79816" - x2="51.01355" - y1="238.54002" - x1="25.437477" - gradientTransform="matrix(1.000006,0,0,1,258.9997,-253)" - gradientUnits="userSpaceOnUse" - id="linearGradient15644" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - id="linearGradient20973"> - <stop - style="stop-color:#15ff00;stop-opacity:1;" - offset="0" - id="stop20975" /> - <stop - style="stop-color:#15ff00;stop-opacity:0;" - offset="1" - id="stop20977" /> - </linearGradient> - <linearGradient - id="linearGradient20962"> - <stop - id="stop20965" - offset="0" - style="stop-color:#00a8ff;stop-opacity:1;" /> - <stop - id="stop20967" - offset="1" - style="stop-color:#00a8ff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient20036"> - <stop - id="stop20038" - offset="0" - style="stop-color:#ffb55e;stop-opacity:1;" /> - <stop - id="stop20040" - offset="1" - style="stop-color:#ff8400;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="160.02296" - x2="190.41687" - y1="169.14206" - x1="197.63152" - gradientUnits="userSpaceOnUse" - id="linearGradient15574" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.6508478,-9.2334126)" - y2="105.27895" - x2="59.057678" - y1="93.805557" - x1="47.655102" - gradientUnits="userSpaceOnUse" - id="linearGradient15358" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="103.11092" - x2="135.45256" - y1="75.666725" - x1="109.04134" - gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)" - gradientUnits="userSpaceOnUse" - id="linearGradient15356" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient15362" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="120.87388" - x2="135.36497" - y1="111.98244" - x1="124.40742" - gradientUnits="userSpaceOnUse" - id="linearGradient15360" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="239.94608" - x2="363.71661" - y1="220.55545" - x1="348.06064" - gradientTransform="matrix(1.2859754,0,0,1,39.669142,20)" - gradientUnits="userSpaceOnUse" - id="linearGradient21531" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="84.75" - x2="18.01141" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient14517" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="248.37102" - x2="35.029804" - y1="216.62332" - x1="3.3959732" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient14511" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="82.75" - x2="17.011419" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient16069" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="239.94608" - x2="363.71661" - y1="220.55545" - x1="348.06064" - gradientTransform="matrix(1.2859754,0,0,1,-440.36032,-147)" - gradientUnits="userSpaceOnUse" - id="linearGradient16067" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="248.37102" - x2="35.029804" - y1="219.61856" - x1="6.9917974" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient16063" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="85.5" - x2="18.51141" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient16154" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.71701" - x2="33.15686" - y1="217.4549" - x1="3.8504581" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient16150" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="248.37102" - x2="35.029804" - y1="223.47467" - x1="9.5404434" - gradientTransform="matrix(0.8520698,0,0,0.7746114,324.58589,47.486124)" - gradientUnits="userSpaceOnUse" - id="linearGradient15734" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="85.5" - x2="18.51141" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient16174" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.71701" - x2="33.15686" - y1="217.3624" - x1="2.911078" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient16170" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="248.37102" - x2="35.029804" - y1="223.47467" - x1="9.5404434" - gradientTransform="matrix(0.8520698,0,0,0.7746114,324.58589,47.486124)" - gradientUnits="userSpaceOnUse" - id="linearGradient15736" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - id="linearGradient13998"> - <stop - style="stop-color:#f57d07;stop-opacity:1;" - offset="0" - id="stop14000" /> - <stop - style="stop-color:white;stop-opacity:1;" - offset="1" - id="stop14002" /> - </linearGradient> - <linearGradient - id="linearGradient4343"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop4345" /> - <stop - style="stop-color:#fff9f9;stop-opacity:0;" - offset="1" - id="stop4347" /> - </linearGradient> - <linearGradient - y2="-268.04858" - x2="-279.44821" - y1="-274.23453" - x1="-285.65732" - gradientTransform="matrix(1.3333334,0,0,0.8333334,747.50001,337.33345)" - gradientUnits="userSpaceOnUse" - id="linearGradient15057" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="164.5" - x2="75.731438" - y1="164.125" - x1="43.647511" - gradientTransform="matrix(1,0,0,1.166667,-441,-81.66662)" - gradientUnits="userSpaceOnUse" - id="linearGradient15053" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="165" - x2="147" - y1="166.53206" - x1="148.71947" - gradientUnits="userSpaceOnUse" - id="linearGradient15705" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="162.03282" - x2="150.08357" - y1="158.34668" - x1="146.80022" - gradientUnits="userSpaceOnUse" - id="linearGradient15703" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="165" - x2="147" - y1="166.53206" - x1="148.71947" - gradientUnits="userSpaceOnUse" - id="linearGradient15701" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="164.94562" - x2="149.88129" - y1="126.83902" - x1="122.84515" - gradientUnits="userSpaceOnUse" - id="linearGradient15699" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="249.99998" - x2="392.0101" - y1="224.99998" - x1="392.0101" - gradientUnits="userSpaceOnUse" - id="linearGradient15742" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="118.5" - x2="235" - y1="118.47696" - x1="227.57907" - gradientTransform="translate(19.97577,-6.0080883)" - gradientUnits="userSpaceOnUse" - id="linearGradient15721" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="121" - x2="233.08319" - y1="110.37873" - x1="222.4996" - gradientTransform="translate(19.97577,-6.0080883)" - gradientUnits="userSpaceOnUse" - id="linearGradient15719" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="124.09359" - x2="230.74091" - y1="100.89436" - x1="230.95012" - gradientTransform="translate(0,-6.0080883)" - gradientUnits="userSpaceOnUse" - id="linearGradient15723" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="122.0597" - x2="135.54141" - y1="112.31642" - x1="126.37006" - gradientUnits="userSpaceOnUse" - id="linearGradient15778" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient15780" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="243.70523" - x2="129.81586" - y1="246.32236" - x1="132.35471" - gradientTransform="translate(0,10.767079)" - gradientUnits="userSpaceOnUse" - id="linearGradient15776" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="123.17216" - x2="136.3542" - y1="88.301094" - x1="103.53399" - gradientUnits="userSpaceOnUse" - id="linearGradient15774" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="129.82761" - x2="144.22272" - y1="112.31642" - x1="126.37006" - gradientUnits="userSpaceOnUse" - id="linearGradient15450" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient15452" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="243.31177" - x2="129.24866" - y1="246.32236" - x1="132.12782" - gradientUnits="userSpaceOnUse" - id="linearGradient15448" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="121.19196" - x2="135.40274" - y1="69.87941" - x1="87.969383" - gradientUnits="userSpaceOnUse" - id="linearGradient15446" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="131.65625" - x2="24.625006" - y1="117.46875" - x1="9.062501" - gradientUnits="userSpaceOnUse" - id="linearGradient15582" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="131.5226" - x2="43.766914" - y1="116.80592" - x1="28.607456" - gradientUnits="userSpaceOnUse" - id="linearGradient15584" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="36.739578" - x2="331.44778" - y1="33.505165" - x1="328.38852" - gradientUnits="userSpaceOnUse" - id="linearGradient15124" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="37.044456" - x2="331.74063" - y1="33.94022" - x1="328.95557" - gradientUnits="userSpaceOnUse" - id="linearGradient15122" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <linearGradient - y2="112.34031" - x2="184.43379" - y1="122.12527" - x1="192.11751" - gradientUnits="userSpaceOnUse" - id="linearGradient16025" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="111.7235" - x2="204.05295" - y1="121.417" - x1="213.51967" - gradientTransform="matrix(-0.395521,0,0,-0.3955,275.223,171.0515)" - gradientUnits="userSpaceOnUse" - id="linearGradient15580" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="112.67535" - x2="203.33264" - y1="122.66508" - x1="213.53587" - gradientTransform="matrix(0.607961,0,0,0.607967,64.49194,51.63899)" - gradientUnits="userSpaceOnUse" - id="linearGradient15578" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="117.00745" - x2="336.72485" - y1="143.70836" - x1="349.04059" - gradientTransform="rotate(-45,396.37194,506.00979)" - gradientUnits="userSpaceOnUse" - id="linearGradient15748" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - id="linearGradient10585"> - <stop - style="stop-color:#d7d7d7;stop-opacity:1.0000000;" - offset="0.0000000" - id="stop10587" /> - <stop - style="stop-color:#000000;stop-opacity:1.0000000;" - offset="1.0000000" - id="stop10595" /> - </linearGradient> - <linearGradient - id="linearGradient4138"> - <stop - id="stop4140" - offset="0" - style="stop-color:#6c432f;stop-opacity:1;" /> - <stop - id="stop4142" - offset="1" - style="stop-color:#c0966d;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient31320"> - <stop - id="stop31322" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop31324" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient12678"> - <stop - style="stop-color:#d40000;stop-opacity:1" - offset="0" - id="stop12680" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop12682" /> - </linearGradient> - <linearGradient - y2="81.14637" - x2="110.48556" - y1="101.22832" - x1="86.452194" - gradientTransform="translate(1.691866,0.00341)" - gradientUnits="userSpaceOnUse" - id="linearGradient13991" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="133.53448" - x2="142.29109" - y1="121.2412" - x1="130.59862" - gradientTransform="translate(1.401389,-3.2412)" - gradientUnits="userSpaceOnUse" - id="linearGradient13520" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="115.54105" - x2="129.67148" - y1="134.18185" - x1="147.07098" - id="linearGradient23215" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient23178"> - <stop - id="stop23180" - offset="0" - style="stop-color:#ff992b;stop-opacity:1;" /> - <stop - id="stop23182" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient13973"> - <stop - id="stop13975" - offset="0" - style="stop-color:#3c4c18;stop-opacity:1;" /> - <stop - id="stop13977" - offset="1" - style="stop-color:#9aff31;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient13938"> - <stop - style="stop-color:#6e0c00;stop-opacity:1;" - offset="0" - id="stop13940" /> - <stop - style="stop-color:#ee3800;stop-opacity:0;" - offset="1" - id="stop13942" /> - </linearGradient> - <linearGradient - id="linearGradient14232"> - <stop - id="stop14234" - offset="0" - style="stop-color:#fff32a;stop-opacity:1;" /> - <stop - id="stop14236" - offset="1" - style="stop-color:#fff551;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient14418"> - <stop - style="stop-color:#fa2509;stop-opacity:1;" - offset="0" - id="stop14420" /> - <stop - style="stop-color:#fa2509;stop-opacity:0;" - offset="1" - id="stop14422" /> - </linearGradient> - <linearGradient - y2="77.499992" - x2="477.25" - y1="73.999992" - x1="474" - gradientTransform="translate(-26,2.9206276e-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient14935" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="77.5" - x2="477.5" - y1="75" - x1="474.84375" - gradientTransform="translate(-6,1.4603138e-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient14841" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-216.25" - x2="157.91019" - y1="-216.25" - x1="148.15451" - gradientTransform="translate(0,-22)" - gradientUnits="userSpaceOnUse" - id="linearGradient18852" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-219.8996" - x2="105.81714" - y1="-227.83138" - x1="107.15463" - gradientUnits="userSpaceOnUse" - id="linearGradient18850" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-217.99782" - x2="136.51436" - y1="-219.24783" - x1="123.36729" - gradientTransform="translate(20.000285,-20.002166)" - gradientUnits="userSpaceOnUse" - id="linearGradient18848" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-219.49783" - x2="123.63815" - y1="-219.54408" - x1="135.30351" - gradientTransform="translate(20.000285,-20.002166)" - gradientUnits="userSpaceOnUse" - id="linearGradient18845" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-215.99998" - x2="146.36111" - y1="-215.99998" - x1="157.97339" - gradientTransform="translate(0,-22)" - gradientUnits="userSpaceOnUse" - id="linearGradient18843" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-239.14549" - x2="149.95467" - y1="-234" - x1="151" - gradientTransform="translate(279.04534,461.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient18901" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-236.85815" - x2="150.25" - y1="-234" - x1="151" - gradientTransform="translate(280.04419,461)" - gradientUnits="userSpaceOnUse" - id="linearGradient18904" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-241.85452" - x2="145.20955" - y1="-235.21587" - x1="150.11926" - gradientTransform="translate(280.99885,461)" - gradientUnits="userSpaceOnUse" - id="linearGradient18898" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="-239.28557" - x2="147.41411" - y1="-234.00002" - x1="150.95467" - gradientTransform="translate(280,461)" - gradientUnits="userSpaceOnUse" - id="linearGradient18896" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="-239.28557" - x2="147.41411" - y1="-234.00002" - x1="150.95467" - gradientTransform="translate(280,459)" - gradientUnits="userSpaceOnUse" - id="linearGradient17819" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="-239.28557" - x2="147.41411" - y1="-234.00002" - x1="150.95467" - gradientTransform="translate(280,461)" - gradientUnits="userSpaceOnUse" - id="linearGradient17817" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="-216.25" - x2="157.91019" - y1="-216.25" - x1="148.15451" - gradientTransform="translate(0,-22)" - gradientUnits="userSpaceOnUse" - id="linearGradient17535" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-219.8996" - x2="105.81714" - y1="-227.83138" - x1="107.15463" - gradientUnits="userSpaceOnUse" - id="linearGradient17533" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-217.99782" - x2="136.51436" - y1="-219.24783" - x1="123.36729" - gradientTransform="translate(20.000285,-20.002166)" - gradientUnits="userSpaceOnUse" - id="linearGradient17531" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-219.49783" - x2="123.63815" - y1="-219.54408" - x1="135.30351" - gradientTransform="translate(20.000285,-20.002166)" - gradientUnits="userSpaceOnUse" - id="linearGradient17529" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-215.99998" - x2="146.36111" - y1="-215.99998" - x1="157.97339" - gradientTransform="translate(0,-22)" - gradientUnits="userSpaceOnUse" - id="linearGradient17527" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - id="linearGradient18207" - inkscape:collect="always"> - <stop - id="stop18209" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop18211" - offset="1" - style="stop-color:#ffffff;stop-opacity:1" /> - </linearGradient> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="218.48816" - x2="519.44189" - y1="219" - x1="481.46063" - id="linearGradient18213" - xlink:href="#linearGradient18207" - inkscape:collect="always" /> - <linearGradient - y2="-216.25" - x2="157.91019" - y1="-216.25" - x1="148.15451" - gradientTransform="translate(0,-22)" - gradientUnits="userSpaceOnUse" - id="linearGradient17506" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-219.8996" - x2="105.81714" - y1="-227.83138" - x1="107.15463" - gradientUnits="userSpaceOnUse" - id="linearGradient17504" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-217.99782" - x2="136.51436" - y1="-219.24783" - x1="123.36729" - gradientTransform="translate(20.000285,-20.002166)" - gradientUnits="userSpaceOnUse" - id="linearGradient17502" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="-219.49783" - x2="123.63815" - y1="-219.54408" - x1="135.30351" - gradientTransform="translate(20.000285,-20.002166)" - gradientUnits="userSpaceOnUse" - id="linearGradient17500" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-215.99998" - x2="146.36111" - y1="-215.99998" - x1="157.97339" - gradientTransform="translate(0,-22)" - gradientUnits="userSpaceOnUse" - id="linearGradient17498" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-54.124699" - x2="352.46426" - y1="-45.098213" - x1="362.28571" - gradientTransform="matrix(1.2078427,0,0,1.0516432,-357.40769,69.427229)" - gradientUnits="userSpaceOnUse" - id="linearGradient18670" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="118.69846" - x2="132.35237" - y1="114.74636" - x1="127.50285" - gradientUnits="userSpaceOnUse" - id="linearGradient15592" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="120.58403" - x2="135.54628" - y1="114.74636" - x1="127.50285" - gradientUnits="userSpaceOnUse" - id="linearGradient15590" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="118.10129" - x2="131.10667" - y1="112.22441" - x1="124.52369" - gradientUnits="userSpaceOnUse" - id="linearGradient15596" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="120.14633" - x2="134.62978" - y1="114.74636" - x1="127.50285" - gradientUnits="userSpaceOnUse" - id="linearGradient15594" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - id="linearGradient14219"> - <stop - style="stop-color:#ff8605;stop-opacity:1;" - offset="0" - id="stop14221" /> - <stop - style="stop-color:#9c6700;stop-opacity:0;" - offset="1" - id="stop14223" /> - </linearGradient> - <linearGradient - id="linearGradient31456"> - <stop - id="stop31458" - offset="0" - style="stop-color:#2b1600;stop-opacity:1;" /> - <stop - id="stop31460" - offset="1" - style="stop-color:#6e3900;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient19425"> - <stop - id="stop19427" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - style="stop-color:#fffffe;stop-opacity:0.65789473;" - offset="0.63109845" - id="stop19431" /> - <stop - id="stop19429" - offset="1.0000000" - style="stop-color:#fffffe;stop-opacity:0.0000000;" /> - </linearGradient> - <linearGradient - id="linearGradient30208" - inkscape:collect="always"> - <stop - id="stop30210" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop30212" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="118" - x2="132.98256" - y1="125.66204" - x1="125.19086" - gradientUnits="userSpaceOnUse" - id="linearGradient15782" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient9030"> - <stop - id="stop9032" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop9034" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient1610"> - <stop - id="stop1611" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient37542"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546" /> - </linearGradient> - <linearGradient - id="linearGradient30124"> - <stop - id="stop30126" - offset="0" - style="stop-color:#1d4a8c;stop-opacity:1;" /> - <stop - id="stop30128" - offset="1" - style="stop-color:#c1d4f2;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient15893"> - <stop - id="stop15895" - offset="0" - style="stop-color:#2968c3;stop-opacity:1;" /> - <stop - style="stop-color:#b5ccf0;stop-opacity:1;" - offset="0.37679368" - id="stop15897" /> - <stop - id="stop15899" - offset="0.59786767" - style="stop-color:#b5ccf0;stop-opacity:1;" /> - <stop - id="stop15901" - offset="1" - style="stop-color:#2968c3;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient319"> - <stop - id="stop320" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient24000" - inkscape:collect="always"> - <stop - id="stop24002" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop24004" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient10069"> - <stop - id="stop10071" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient32998"> - <stop - id="stop33000" - offset="0" - style="stop-color:#2968c3;stop-opacity:1;" /> - <stop - id="stop33002" - offset="1" - style="stop-color:#c1d7f8;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="29.392145" - x2="277.86761" - y1="11.593864" - x1="261.83936" - gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)" - gradientUnits="userSpaceOnUse" - id="linearGradient21364" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="37.115723" - x2="283.42514" - y1="24.537012" - x1="272.05627" - gradientTransform="matrix(0.888889,0,0,1,-32.9445,114.0045)" - gradientUnits="userSpaceOnUse" - id="linearGradient21366" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="239.125" - x1="85.1875" - gradientTransform="translate(124,-102.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient21368" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="29.392145" - x2="277.86761" - y1="11.593864" - x1="261.83936" - gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)" - gradientUnits="userSpaceOnUse" - id="linearGradient21370" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="37.115723" - x2="283.42514" - y1="24.537012" - x1="272.05627" - gradientTransform="matrix(0.888889,0,0,1,-32.9445,114.0045)" - gradientUnits="userSpaceOnUse" - id="linearGradient21372" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="239.125" - x1="85.1875" - gradientTransform="translate(124,-102.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient21374" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="6.9000001" - fy="14.5" - fx="350.5" - cy="14.5" - cx="350.5" - gradientTransform="matrix(0.891843,0,0,0.909224,-173.99085,171.21624)" - gradientUnits="userSpaceOnUse" - id="radialGradient21517" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="120.24665" - x2="133.62564" - y1="114.74636" - x1="127.50285" - gradientUnits="userSpaceOnUse" - id="linearGradient21641" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="118" - x2="132" - y1="113.21745" - x1="126.15096" - gradientUnits="userSpaceOnUse" - id="linearGradient21643" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="247.73561" - x2="274.30609" - y1="234.6606" - x1="261.44702" - gradientTransform="translate(159.9998,-41.00751)" - gradientUnits="userSpaceOnUse" - id="linearGradient20796" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="94.53125" - x2="228.71886" - y1="103" - x1="235.46884" - gradientTransform="translate(199.9999,105.99249)" - gradientUnits="userSpaceOnUse" - id="linearGradient20798" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="247.71701" - x2="33.15686" - y1="215.76874" - x1="3.2344713" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient21862" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="86" - x2="19.011419" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient21864" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.71701" - x2="33.15686" - y1="215.35608" - x1="3.3268692" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient21902" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="85.5" - x2="18.51141" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient21904" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="269.1373" - x2="55.384842" - y1="238.33629" - x1="24.374985" - gradientTransform="matrix(1.000006,0,0,1,258.9997,-237)" - gradientUnits="userSpaceOnUse" - id="linearGradient31646" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-5.8786855" - x2="291.577" - y1="-16.978563" - x1="278.55817" - gradientTransform="translate(0,16)" - gradientUnits="userSpaceOnUse" - id="linearGradient31648" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="4.25" - fy="11.818644" - fx="306.55292" - cy="11.818644" - cx="306.55292" - gradientTransform="matrix(0.816279,0,-3.646264e-6,0.779872,56.32029,28.34496)" - gradientUnits="userSpaceOnUse" - id="radialGradient31650" - xlink:href="#linearGradient20036" - inkscape:collect="always" /> - <radialGradient - r="4.25" - fy="10.620173" - fx="312.80765" - cy="10.620173" - cx="312.80765" - gradientTransform="matrix(1.580596,1.138426,-0.692447,0.961382,-175.3891,-329.6844)" - gradientUnits="userSpaceOnUse" - id="radialGradient31652" - xlink:href="#linearGradient14418" - inkscape:collect="always" /> - <radialGradient - r="4.25" - fy="15.619254" - fx="313.74268" - cy="15.619254" - cx="313.74268" - gradientTransform="matrix(1.48445,-0.00657397,0.00734631,1.660903,-154.1629,19.305572)" - gradientUnits="userSpaceOnUse" - id="radialGradient31654" - xlink:href="#linearGradient20962" - inkscape:collect="always" /> - <radialGradient - r="4.25" - fy="15.518281" - fx="309.0571" - cy="15.518281" - cx="309.0571" - gradientTransform="matrix(0.756245,0,-3.378096e-6,0.722516,72.63115,31.07857)" - gradientUnits="userSpaceOnUse" - id="radialGradient31656" - xlink:href="#linearGradient20973" - inkscape:collect="always" /> - <linearGradient - y2="248.75177" - x2="32.351238" - y1="205.0083" - x1="-6.3249049" - gradientTransform="matrix(0.8579582,0,0,0.9285714,7.397998,-211.96428)" - gradientUnits="userSpaceOnUse" - id="linearGradient31664" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="243.92201" - x2="345.98633" - y1="216.75188" - x1="347.6467" - gradientTransform="matrix(0,-0.9569715,-1,0,259,351.18743)" - gradientUnits="userSpaceOnUse" - id="linearGradient31666" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="84.75" - x2="18.01141" - y1="71.51989" - x1="5.9836898" - gradientTransform="matrix(0.9166667,0,0,0.9166667,24.364541,-55.041665)" - gradientUnits="userSpaceOnUse" - id="linearGradient31668" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="238.44429" - x2="346.58698" - y1="218.2382" - x1="346.15555" - gradientTransform="matrix(0,-0.9297203,-1.2117965,0,305.73028,342.22894)" - gradientUnits="userSpaceOnUse" - id="linearGradient31672" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)" - gradientUnits="userSpaceOnUse" - id="linearGradient31694" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="107.18619" - x2="79.355118" - y1="97.5" - x1="70.55275" - gradientTransform="translate(-15.983875,338)" - gradientUnits="userSpaceOnUse" - id="linearGradient31696" - xlink:href="#linearGradient13938" - inkscape:collect="always" /> - <linearGradient - y2="112.03586" - x2="86.00116" - y1="90.951675" - x1="64.998215" - gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)" - gradientUnits="userSpaceOnUse" - id="linearGradient31698" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="31.019331" - x2="277.61203" - y1="10.838325" - x1="257.0376" - gradientTransform="matrix(0.888889,0,0,1,105.5221,92.482413)" - gradientUnits="userSpaceOnUse" - id="linearGradient31932" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="83.002625" - x2="346.08932" - y1="68.624634" - x1="332.03717" - gradientTransform="matrix(0.7827973,0,0,0.9989462,77.082208,42.08484)" - gradientUnits="userSpaceOnUse" - id="linearGradient31934" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="236" - x1="79.329903" - gradientTransform="translate(262,-125)" - gradientUnits="userSpaceOnUse" - id="linearGradient31936" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="118" - x2="132" - y1="126.23546" - x1="124.14184" - gradientUnits="userSpaceOnUse" - id="linearGradient33666" - xlink:href="#linearGradient24000" - inkscape:collect="always" /> - <linearGradient - y2="116.55647" - x2="133.53401" - y1="125.94608" - x1="125.45158" - gradientUnits="userSpaceOnUse" - id="linearGradient33668" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="119.554" - x2="130.82327" - y1="107.64013" - x1="142.97318" - gradientUnits="userSpaceOnUse" - id="linearGradient33670" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="118.66972" - x2="132" - y1="110.56118" - x1="139.93341" - gradientUnits="userSpaceOnUse" - id="linearGradient33681" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="127.60542" - x2="123.9021" - y1="98.630066" - x1="149.55772" - gradientUnits="userSpaceOnUse" - id="linearGradient33700" - xlink:href="#linearGradient32842" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="117.09563" - x1="130.95198" - gradientUnits="userSpaceOnUse" - id="linearGradient10540" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="119.79803" - x2="133.01006" - y1="106.08605" - x1="119.1647" - gradientUnits="userSpaceOnUse" - id="linearGradient11333" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="14.103563" - x2="236.47855" - y1="5.7625732" - x1="225.6198" - gradientTransform="translate(-425,393.99999)" - gradientUnits="userSpaceOnUse" - id="linearGradient28057" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="263.55374" - x2="307" - y1="272" - x1="306.26187" - id="linearGradient28077" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <linearGradient - y2="110.49417" - x2="446.26407" - y1="121.42467" - x1="431.05026" - gradientTransform="translate(0,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient28474" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="122.95798" - x2="450.27414" - y1="107.56771" - x1="442.69827" - gradientTransform="translate(0,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient28528" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="117.90625" - x2="447.96875" - y1="104.34499" - x1="437.57828" - gradientTransform="translate(-474,158.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient28530" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="253.23859" - x2="-20.826464" - y1="266.11719" - x1="-38.103703" - gradientTransform="translate(0,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient28532" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="182.52524" - x2="213.7883" - y1="182.09375" - x1="207.04637" - id="linearGradient10982" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="182.77524" - x2="222.35799" - y1="182.09375" - x1="212.04637" - id="linearGradient10984" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="203" - x2="376.48389" - y1="203" - x1="371.98389" - id="linearGradient11762" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="202.75" - x2="370.98389" - y1="203" - x1="366.98389" - id="linearGradient11764" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="244.68996" - x2="386.13718" - y1="243.48854" - x1="391.62881" - id="linearGradient11766" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="1.5" - fy="14.5" - fx="70.5" - cy="14.5" - cx="70.5" - gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)" - gradientUnits="userSpaceOnUse" - id="radialGradient12427" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <radialGradient - r="5.5192375" - fy="14.649424" - fx="70.470596" - cy="14.649424" - cx="70.470596" - gradientTransform="matrix(0.5007214,0.3131662,-0.3623683,0.5793905,300.02235,-93.056748)" - gradientUnits="userSpaceOnUse" - id="radialGradient12429" - xlink:href="#linearGradient14219" - inkscape:collect="always" /> - <linearGradient - y2="58.272621" - x2="95.954262" - y1="66.110847" - x1="88.079262" - gradientTransform="matrix(1,0,0,-1,456.04574,-116.51416)" - gradientUnits="userSpaceOnUse" - id="linearGradient12602" - xlink:href="#linearGradient16359" - inkscape:collect="always" /> - <linearGradient - y2="726.37006" - x2="1661.8125" - y1="722" - x1="1663.8125" - gradientTransform="translate(-1438.0001,-418)" - gradientUnits="userSpaceOnUse" - id="linearGradient12114" - xlink:href="#linearGradient31456" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="722.19189" - fx="1662.2664" - cy="722.19189" - cx="1662.2664" - gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1830.2675,-33.64056)" - gradientUnits="userSpaceOnUse" - id="radialGradient12116" - xlink:href="#linearGradient19425" - inkscape:collect="always" /> - <linearGradient - y2="829.35315" - x2="1978.11" - y1="828.21777" - x1="1984.5453" - gradientTransform="matrix(0.8167109,0,0,0.8433415,-1397.7474,-388.72044)" - gradientUnits="userSpaceOnUse" - id="linearGradient12118" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="726.37006" - x2="1661.8125" - y1="722" - x1="1663.8125" - gradientTransform="translate(-1297,-948)" - gradientUnits="userSpaceOnUse" - id="linearGradient12213" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="722.19189" - fx="1662.2664" - cy="722.19189" - cx="1662.2664" - gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1689.2674,-563.64056)" - gradientUnits="userSpaceOnUse" - id="radialGradient12215" - xlink:href="#linearGradient19425" - inkscape:collect="always" /> - <linearGradient - y2="827.32849" - x2="1979.2772" - y1="827.77124" - x1="1984.3658" - gradientTransform="matrix(0.8167109,0,0,0.8433415,-1256.7473,-918.72044)" - gradientUnits="userSpaceOnUse" - id="linearGradient12217" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="152.46707" - x2="262.24991" - y1="147.38998" - x1="257.24991" - gradientTransform="matrix(1.2000005,0,0,1.1997014,-125.70008,-191.68873)" - gradientUnits="userSpaceOnUse" - id="linearGradient12305" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="153.8233" - x2="264.16571" - y1="147.87068" - x1="258.08322" - gradientTransform="matrix(1.2000005,0,0,1.1997014,-125.70008,-191.68873)" - gradientUnits="userSpaceOnUse" - id="linearGradient12307" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="152.24998" - x2="-80" - y1="151" - x1="-80" - gradientTransform="translate(360,-161.99999)" - gradientUnits="userSpaceOnUse" - id="linearGradient13046" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="152.24998" - x2="-80" - y1="151" - x1="-80" - gradientTransform="translate(360,-145.93749)" - gradientUnits="userSpaceOnUse" - id="linearGradient13056" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="143.58749" - x2="451.98389" - y1="133.98936" - x1="443.86667" - gradientTransform="translate(-636.98388,52.01562)" - gradientUnits="userSpaceOnUse" - id="linearGradient14167" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="133.00301" - x2="453.61005" - y1="135.76678" - x1="456.03769" - gradientTransform="translate(-635.98388,53.01562)" - gradientUnits="userSpaceOnUse" - id="linearGradient14169" - xlink:href="#linearGradient4138" - inkscape:collect="always" /> - <linearGradient - y2="138.7879" - x2="453.24457" - y1="136.18045" - x1="449.14645" - gradientTransform="translate(-636.98388,52.01562)" - gradientUnits="userSpaceOnUse" - id="linearGradient14171" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="133.62801" - x2="454.31345" - y1="135.76678" - x1="456.03769" - gradientTransform="translate(-635.98388,53.01562)" - gradientUnits="userSpaceOnUse" - id="linearGradient14173" - xlink:href="#linearGradient4138" - inkscape:collect="always" /> - <linearGradient - y2="113.20281" - x2="126.67323" - y1="120.62622" - x1="133.42287" - gradientUnits="userSpaceOnUse" - id="linearGradient13112" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="129.62753" - x2="144.64095" - y1="106.19939" - x1="120.77391" - gradientUnits="userSpaceOnUse" - id="linearGradient13114" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="435.32159" - x2="211.99998" - y1="435.59741" - x1="212" - gradientTransform="matrix(0.8289081,0,0,2.1560411,236.27148,-864.45588)" - gradientUnits="userSpaceOnUse" - id="linearGradient16027" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="440.57812" - x2="238.53125" - y1="440.51562" - x1="229.6875" - gradientTransform="matrix(1.1035181,0,0,1,158.18497,-359.77344)" - gradientUnits="userSpaceOnUse" - id="linearGradient16031" - xlink:href="#linearGradient23647" - inkscape:collect="always" /> - <radialGradient - r="6.7191267" - fy="441.84744" - fx="224.32494" - cy="441.84744" - cx="224.32494" - gradientTransform="matrix(1.8126517,-0.04317018,0.04642643,1.9485655,-18.817545,-774.28453)" - gradientUnits="userSpaceOnUse" - id="radialGradient16034" - xlink:href="#linearGradient23390" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(0.9803611,0,0,2.1560411,204.16345,-864.45588)" - y2="436.07974" - x2="211.99998" - y1="435.7319" - x1="211.99998" - gradientUnits="userSpaceOnUse" - id="linearGradient16036" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <linearGradient - y2="448.88205" - x2="238.87605" - y1="439.75" - x1="221.96414" - gradientTransform="translate(182,-359.75)" - gradientUnits="userSpaceOnUse" - id="linearGradient16039" - xlink:href="#linearGradient23647" - inkscape:collect="always" /> - <linearGradient - y2="252.63284" - x2="-45.689278" - y1="252.69086" - x1="-4.9152389" - gradientTransform="matrix(-1.0041772,0,0,0.9688607,-81.584854,117.13687)" - gradientUnits="userSpaceOnUse" - id="linearGradient17337" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="60.125" - x2="117" - y1="53.875" - x1="107.96875" - gradientTransform="matrix(0.9993234,0,0,1.0050357,-171.92846,305.72314)" - gradientUnits="userSpaceOnUse" - id="linearGradient17339" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="256.70349" - x2="44.522621" - y1="201" - x1="-12.839478" - gradientTransform="matrix(1.0008786,0,0,1.081555,-21.021535,-187.45087)" - gradientUnits="userSpaceOnUse" - id="linearGradient17656" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="81" - x2="15" - y1="76" - x1="9.6310225" - gradientTransform="matrix(1.099576,0,0,1.0999923,190.46996,204.85062)" - gradientUnits="userSpaceOnUse" - id="linearGradient17658" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="251.42462" - x2="-46.452946" - y1="250.87607" - x1="-5.6700387" - gradientTransform="matrix(-1.0041772,0,0,0.9688607,370.43125,-83.863716)" - gradientUnits="userSpaceOnUse" - id="linearGradient17712" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="60.125" - x2="117" - y1="50.742527" - x1="102.61966" - gradientTransform="matrix(0.9993234,0,0,1.0050357,280.08766,104.72255)" - gradientUnits="userSpaceOnUse" - id="linearGradient17714" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.64391" - x2="151.40744" - y1="104.61366" - x1="150.4086" - gradientTransform="matrix(0.8193413,0,0,0.8193419,-388.72692,-564.02452)" - gradientUnits="userSpaceOnUse" - id="linearGradient12655" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(0.8193413,0,0,0.8193419,141.28585,391.96271)" - y2="105.64391" - x2="151.40744" - y1="104.61366" - x1="150.4086" - gradientUnits="userSpaceOnUse" - id="linearGradient12658" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <linearGradient - y2="105.64391" - x2="151.40744" - y1="104.61366" - x1="150.4086" - gradientTransform="matrix(0.8193413,0,0,0.8193419,141.28585,391.96271)" - gradientUnits="userSpaceOnUse" - id="linearGradient13511" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <linearGradient - y2="105.64391" - x2="151.40744" - y1="104.61366" - x1="150.4086" - gradientTransform="matrix(0.8193413,0,0,0.8193419,-388.72692,-564.02452)" - gradientUnits="userSpaceOnUse" - id="linearGradient13513" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="37.044456" - x2="331.74063" - y1="33.94022" - x1="328.95557" - gradientUnits="userSpaceOnUse" - id="linearGradient13527" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <linearGradient - y2="36.739578" - x2="331.44778" - y1="33.505165" - x1="328.38852" - gradientUnits="userSpaceOnUse" - id="linearGradient13529" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="115.99998" - x2="88.983887" - y1="127.99998" - x1="97.983887" - gradientTransform="translate(68.016116,127.00002)" - gradientUnits="userSpaceOnUse" - id="linearGradient14568" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="125.83332" - x2="89.207298" - y1="122.13319" - x1="94.485573" - gradientUnits="userSpaceOnUse" - id="linearGradient14570" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="123.83599" - x2="94.011101" - y1="127.88263" - x1="88.560204" - gradientUnits="userSpaceOnUse" - id="linearGradient14572" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="224.99274" - x2="-174.18907" - y1="245" - x1="-162.89217" - id="linearGradient13699" - xlink:href="#linearGradient47130" - inkscape:collect="always" /> - <linearGradient - y2="53.875874" - x2="11.472005" - y1="57.827747" - x1="13.5" - gradientUnits="userSpaceOnUse" - id="linearGradient26282" - xlink:href="#linearGradient13998" - inkscape:collect="always" /> - <linearGradient - y2="487.60382" - x2="-26.642899" - y1="501.96539" - x1="-18.600719" - gradientUnits="userSpaceOnUse" - id="linearGradient26284" - xlink:href="#linearGradient13998" - inkscape:collect="always" /> - <linearGradient - y2="57.750687" - x2="13.5" - y1="60.637787" - x1="15.027407" - gradientUnits="userSpaceOnUse" - id="linearGradient26286" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="-22.25" - y1="490.70178" - x1="-32.067383" - gradientTransform="translate(0.03018343,0.1408617)" - gradientUnits="userSpaceOnUse" - id="linearGradient26288" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="241" - x1="87.03125" - gradientTransform="translate(218.01612,129)" - gradientUnits="userSpaceOnUse" - id="linearGradient14198" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="30.743095" - x2="277.68143" - y1="-4.4418921" - x1="246.89435" - gradientTransform="matrix(0.888889,0,0,1,61.53822,346.48241)" - gradientUnits="userSpaceOnUse" - id="linearGradient14204" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)" - gradientUnits="userSpaceOnUse" - id="linearGradient15195" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="107.18619" - x2="79.355118" - y1="97.5" - x1="70.55275" - gradientTransform="translate(-15.983875,338)" - gradientUnits="userSpaceOnUse" - id="linearGradient15209" - xlink:href="#linearGradient71814" - inkscape:collect="always" /> - <linearGradient - y2="112.03586" - x2="86.00116" - y1="88.058716" - x1="61.465469" - gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)" - gradientUnits="userSpaceOnUse" - id="linearGradient15211" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="103.11092" - x2="135.45256" - y1="68.783279" - x1="101.21339" - gradientTransform="matrix(0.9999519,0,0,0.9998051,-33.993941,254.01926)" - gradientUnits="userSpaceOnUse" - id="linearGradient15363" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="93.805557" - x1="47.655102" - gradientTransform="matrix(1.1004102,0,0,1.0993832,40.331334,244.81698)" - gradientUnits="userSpaceOnUse" - id="linearGradient15365" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.3784" - x2="41.654194" - y1="246.97107" - x1="12.330792" - gradientTransform="matrix(-1.032977,0,0,1,128.82015,107.77516)" - gradientUnits="userSpaceOnUse" - id="linearGradient15367" - xlink:href="#linearGradient10585" - inkscape:collect="always" /> - <linearGradient - y2="223.69542" - x2="-171.01999" - y1="313.87549" - x1="-132.24858" - gradientUnits="userSpaceOnUse" - id="linearGradient15383" - xlink:href="#linearGradient18207" - inkscape:collect="always" /> - <linearGradient - y2="81.14637" - x2="110.48556" - y1="101.22832" - x1="86.452194" - gradientTransform="translate(1.691866,0.00341)" - gradientUnits="userSpaceOnUse" - id="linearGradient14377" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="54.8125" - y1="500" - x1="108" - gradientTransform="translate(42)" - gradientUnits="userSpaceOnUse" - id="linearGradient16638" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="498.48148" - x2="26.561054" - y1="501.74075" - x1="85.874489" - gradientTransform="translate(42)" - gradientUnits="userSpaceOnUse" - id="linearGradient16640" - xlink:href="#linearGradient15809" - inkscape:collect="always" /> - <linearGradient - y2="501.58331" - x2="76.885078" - y1="504.67188" - x1="80.768944" - gradientUnits="userSpaceOnUse" - id="linearGradient16642" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="501.04794" - x2="78.000008" - y1="511.42972" - x1="89.526657" - gradientUnits="userSpaceOnUse" - id="linearGradient16644" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="492.15359" - fx="75.95578" - cy="492.15359" - cx="75.95578" - gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,300.60762,256.85923)" - gradientUnits="userSpaceOnUse" - id="radialGradient16646" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <radialGradient - r="2.9089756" - fy="503.81497" - fx="79.959885" - cy="503.81497" - cx="79.959885" - gradientTransform="matrix(1.4624192,0,0,1.4467089,-36.975824,-224.99718)" - gradientUnits="userSpaceOnUse" - id="radialGradient16648" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="499.99969" - fx="74.518959" - cy="499.99969" - cx="74.518959" - gradientTransform="matrix(0.8886193,0.8021825,-0.8051059,0.8972684,411.80247,-8.668512)" - gradientUnits="userSpaceOnUse" - id="radialGradient16650" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="499.87418" - fx="75.054749" - cy="499.87418" - cx="75.054749" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient32447" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - y2="111.74544" - x2="446.73828" - y1="105.03784" - x1="441.48248" - gradientUnits="userSpaceOnUse" - id="linearGradient30231" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="84.928581" - x2="425.92511" - y1="112.86145" - x1="445.37457" - gradientUnits="userSpaceOnUse" - id="linearGradient30233" - xlink:href="#linearGradient24101" - inkscape:collect="always" /> - <linearGradient - y2="110.93529" - x2="446.00906" - y1="106.0996" - x1="440.68439" - gradientUnits="userSpaceOnUse" - id="linearGradient30235" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="110.27587" - x2="445.36435" - y1="105.74502" - x1="440.34833" - gradientUnits="userSpaceOnUse" - id="linearGradient30237" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="110.27587" - x2="445.36435" - y1="104.97093" - x1="440.7211" - gradientUnits="userSpaceOnUse" - id="linearGradient30239" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-36.625011" - x2="414.99771" - y1="-35" - x1="414.99771" - gradientUnits="userSpaceOnUse" - id="linearGradient30241" - xlink:href="#linearGradient23302" - inkscape:collect="always" /> - <linearGradient - y2="-37.718761" - x2="415.94211" - y1="-34" - x1="416.00461" - gradientTransform="translate(-0.004608)" - gradientUnits="userSpaceOnUse" - id="linearGradient30243" - xlink:href="#linearGradient24081" - inkscape:collect="always" /> - <linearGradient - y2="-37.5" - x2="416.5" - y1="-29.933779" - x1="416.5" - gradientTransform="translate(-0.004608)" - gradientUnits="userSpaceOnUse" - id="linearGradient30245" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-39.140816" - x2="416.46497" - y1="-34.342831" - x1="416.41162" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient30247" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="-34.707108" - x2="413.49658" - y1="-40.99012" - x1="409.00003" - gradientUnits="userSpaceOnUse" - id="linearGradient30249" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="100.6615" - x2="436.76331" - y1="112.72269" - x1="446.05634" - gradientUnits="userSpaceOnUse" - id="linearGradient30326" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="111.74544" - x2="446.73828" - y1="103.53646" - x1="440.03735" - gradientUnits="userSpaceOnUse" - id="linearGradient30328" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="94.07222" - x2="432.36887" - y1="114.61743" - x1="447.06949" - gradientUnits="userSpaceOnUse" - id="linearGradient30330" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="110.93529" - x2="446.00906" - y1="103.46223" - x1="438.92477" - gradientUnits="userSpaceOnUse" - id="linearGradient30332" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="110.27587" - x2="445.36435" - y1="104.06953" - x1="439.0434" - gradientUnits="userSpaceOnUse" - id="linearGradient30334" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="110.27587" - x2="445.36435" - y1="104.0401" - x1="439.04333" - gradientUnits="userSpaceOnUse" - id="linearGradient30336" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-36.25" - x2="415" - y1="-33.99012" - x1="415.00003" - gradientUnits="userSpaceOnUse" - id="linearGradient30338" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-37.520515" - x2="415.45193" - y1="-31.506163" - x1="415.41223" - gradientTransform="translate(-0.004608)" - gradientUnits="userSpaceOnUse" - id="linearGradient30340" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-37.5" - x2="416.5" - y1="-29.933779" - x1="416.5" - gradientTransform="translate(-0.004608)" - gradientUnits="userSpaceOnUse" - id="linearGradient30342" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-39.140816" - x2="416.46497" - y1="-33.8125" - x1="416.5" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient30344" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-34.707108" - x2="413.49658" - y1="-40.99012" - x1="409.00003" - gradientUnits="userSpaceOnUse" - id="linearGradient30346" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-40.000008" - x2="408.75" - y1="-35.483223" - x1="408.75" - gradientUnits="userSpaceOnUse" - id="linearGradient30348" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="100.6615" - x2="436.76331" - y1="112.72269" - x1="446.05634" - gradientUnits="userSpaceOnUse" - id="linearGradient30394" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="111.74544" - x2="446.73828" - y1="103.53646" - x1="440.03735" - gradientUnits="userSpaceOnUse" - id="linearGradient30396" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="94.07222" - x2="432.36887" - y1="114.61743" - x1="447.06949" - gradientUnits="userSpaceOnUse" - id="linearGradient30398" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="110.93529" - x2="446.00906" - y1="103.46223" - x1="438.92477" - gradientUnits="userSpaceOnUse" - id="linearGradient30400" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="110.27587" - x2="445.36435" - y1="104.06953" - x1="439.0434" - gradientUnits="userSpaceOnUse" - id="linearGradient30402" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="110.27587" - x2="445.36435" - y1="104.0401" - x1="439.04333" - gradientUnits="userSpaceOnUse" - id="linearGradient30404" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-36.25" - x2="415" - y1="-33.99012" - x1="415.00003" - gradientUnits="userSpaceOnUse" - id="linearGradient30406" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-37.520515" - x2="415.45193" - y1="-31.506163" - x1="415.41223" - gradientTransform="translate(-0.004608)" - gradientUnits="userSpaceOnUse" - id="linearGradient30408" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-37.5" - x2="416.5" - y1="-29.933779" - x1="416.5" - gradientTransform="translate(-0.004608)" - gradientUnits="userSpaceOnUse" - id="linearGradient30410" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-39.140816" - x2="416.46497" - y1="-33.8125" - x1="416.5" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient30412" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-34.707108" - x2="413.49658" - y1="-40.99012" - x1="409.00003" - gradientUnits="userSpaceOnUse" - id="linearGradient30414" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-40.000008" - x2="408.75" - y1="-35.483223" - x1="408.75" - gradientUnits="userSpaceOnUse" - id="linearGradient30416" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="57.261913" - x2="347.91187" - y1="32.007874" - x1="326.51352" - gradientTransform="matrix(1.081988,0,0,1.0833333,-394.58897,440.54169)" - gradientUnits="userSpaceOnUse" - id="linearGradient17429" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="38.161732" - x2="330.87869" - y1="22.7787" - x1="317.30908" - gradientTransform="matrix(1.0983862,0,0,1.0999999,-400.00857,439.95001)" - gradientUnits="userSpaceOnUse" - id="linearGradient17431" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="248.37102" - x2="35.029804" - y1="189.20862" - x1="27.405855" - gradientTransform="matrix(0.8461524,0,0,0.9230835,365.8517,-147.63686)" - gradientUnits="userSpaceOnUse" - id="linearGradient18682" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(359.05264,-81.98142)" - y2="168" - x2="29.972469" - y1="164" - x1="29.972469" - gradientUnits="userSpaceOnUse" - id="linearGradient18690" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="251.99998" - x2="30.435225" - y1="202.99998" - x1="30.435225" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient18752" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)" - y2="88" - x2="16.733877" - y1="71.51989" - x1="5.9836898" - gradientUnits="userSpaceOnUse" - id="linearGradient18756" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="237.9342" - x2="32.267426" - y1="264.90152" - x1="7.9951181" - gradientTransform="matrix(0.6923077,0,0,-0.6923079,29.049874,351.11545)" - gradientUnits="userSpaceOnUse" - id="linearGradient18779" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="84.217026" - x2="-55.844753" - y1="77.808868" - x1="-55.936718" - gradientTransform="translate(-122.98388,276)" - gradientUnits="userSpaceOnUse" - id="linearGradient18823" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.42851" - x2="29.142912" - y1="161.42842" - x1="29.142912" - gradientTransform="matrix(0.5384613,0,0,0.538461,-189.69233,224.07704)" - gradientUnits="userSpaceOnUse" - id="linearGradient18831" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="252.4285" - x2="29.871567" - y1="153.99983" - x1="29.871567" - gradientTransform="matrix(0.462416,0,0,0.538461,-193.81309,224.07705)" - gradientUnits="userSpaceOnUse" - id="linearGradient18841" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="259.08319" - x2="29.871567" - y1="174.58366" - x1="29.871567" - gradientTransform="matrix(0.462416,0,0,0.461541,-193.81309,236.42243)" - gradientUnits="userSpaceOnUse" - id="linearGradient18846" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="84.217026" - x2="-55.844753" - y1="77.808868" - x1="-55.936718" - gradientTransform="matrix(1.2500001,0,0,2.2000001,-102.35484,177)" - gradientUnits="userSpaceOnUse" - id="linearGradient18854" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="84.217026" - x2="-55.844753" - y1="77.808868" - x1="-55.936718" - gradientTransform="matrix(1,0,0,0.8000001,-122.98388,285.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient18858" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="84.6875" - x2="-54.766121" - y1="74.0625" - x1="-60.266121" - gradientTransform="matrix(2.0000001,0,0,1.6000003,163.54205,53.499972)" - gradientUnits="userSpaceOnUse" - id="linearGradient18862" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="411.9375" - x2="-44.983891" - y1="364" - x1="-88.0625" - gradientUnits="userSpaceOnUse" - id="linearGradient32725" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,-117.02574,313.78567)" - gradientUnits="userSpaceOnUse" - id="linearGradient32727" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="121.709" - x2="89.770271" - y1="88.999977" - x1="61.983898" - gradientTransform="matrix(0.6666675,0,0,0.6666633,-101.32265,336.66698)" - gradientUnits="userSpaceOnUse" - id="linearGradient32729" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="112.03586" - x2="86.00116" - y1="88.058716" - x1="61.465469" - gradientTransform="matrix(0.9998599,0,0,0.9960071,-122.97299,306.4115)" - gradientUnits="userSpaceOnUse" - id="linearGradient32731" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="60.463093" - x2="352.03485" - y1="33.927608" - x1="326.72092" - gradientTransform="matrix(1.081988,0,0,1.0833333,-123.05997,-52.467545)" - gradientUnits="userSpaceOnUse" - id="linearGradient32749" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="27" - x2="-21.988398" - y1="1.9796312" - x1="-46.417774" - gradientTransform="translate(-15.983875,338)" - gradientUnits="userSpaceOnUse" - id="linearGradient32751" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="39.250004" - x2="333.96365" - y1="28.882492" - x1="324.13901" - gradientTransform="matrix(1.0983862,0,0,1.0999999,-128.47957,-53.059225)" - gradientUnits="userSpaceOnUse" - id="linearGradient32753" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="452.20007" - x2="-42.377892" - y1="442.6875" - x1="-51.6875" - gradientTransform="translate(18)" - gradientUnits="userSpaceOnUse" - id="linearGradient17135" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="164.34546" - x2="32.679554" - y1="160.10768" - x1="28.322077" - gradientUnits="userSpaceOnUse" - id="linearGradient17177" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="5" - fy="81.592964" - fx="4.351675" - cy="81.592964" - cx="4.351675" - gradientTransform="matrix(-6.8461644e-7,-1.8,1.1087755,0.00352366,-193.46828,187.54551)" - gradientUnits="userSpaceOnUse" - id="radialGradient17179" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="3.4000001" - fy="-14.13948" - fx="244.14325" - cy="-14.13948" - cx="244.14325" - gradientTransform="matrix(1.5123107,0.9569981,-0.5028837,0.7946898,-131.57281,-236.33663)" - gradientUnits="userSpaceOnUse" - id="radialGradient17181" - xlink:href="#linearGradient18344" - inkscape:collect="always" /> - <linearGradient - y2="250" - x2="29.352921" - y1="199" - x1="29.352921" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient17214" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="88" - x2="16.733877" - y1="71.51989" - x1="5.9836898" - gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)" - gradientUnits="userSpaceOnUse" - id="linearGradient17216" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="239.94608" - x2="363.71661" - y1="220.55545" - x1="348.06064" - gradientTransform="matrix(0.2859748,0,0,1,-272.87621,148)" - gradientUnits="userSpaceOnUse" - id="linearGradient17218" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="239.94608" - x2="363.71661" - y1="220.55545" - x1="348.06064" - gradientTransform="matrix(0.4289612,0,0,1,-326.93899,144.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient17220" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="250" - x2="29.352921" - y1="199" - x1="29.352921" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient17222" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="88" - x2="16.733877" - y1="71.51989" - x1="5.9836898" - gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)" - gradientUnits="userSpaceOnUse" - id="linearGradient17224" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="239.94608" - x2="363.71661" - y1="220.55545" - x1="348.06064" - gradientTransform="matrix(1.2868892,0,0,1,-644.69395,148)" - gradientUnits="userSpaceOnUse" - id="linearGradient17226" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="249.62102" - x2="36.247395" - y1="223.47467" - x1="9.5404434" - gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)" - gradientUnits="userSpaceOnUse" - id="linearGradient17242" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="88" - x2="16.733877" - y1="71.51989" - x1="5.9836898" - gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)" - gradientUnits="userSpaceOnUse" - id="linearGradient17244" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="57.84819" - x2="120.79755" - y1="49.547874" - x1="103.65562" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient18712" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-128.30418" - x2="-78.787354" - y1="-120.6127" - x1="-88.73024" - gradientTransform="matrix(-1.004219,0,0,0.980922,244.3928,19.4113)" - gradientUnits="userSpaceOnUse" - id="linearGradient18721" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="55.501457" - x2="72.671516" - y1="51.42366" - x1="68.688324" - gradientTransform="matrix(-1.004219,0,0,0.980922,222.97812,19.5574)" - gradientUnits="userSpaceOnUse" - id="linearGradient18728" - xlink:href="#linearGradient31320" - inkscape:collect="always" /> - <linearGradient - y2="253.15045" - x2="-5.4963508" - y1="252.77303" - x1="-26.207859" - gradientTransform="matrix(-1.004219,0,0,0.980922,309.42934,-349.44584)" - gradientUnits="userSpaceOnUse" - id="linearGradient18765" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <linearGradient - y2="81.382545" - x2="257.38638" - y1="68.113258" - x1="270.66064" - gradientUnits="userSpaceOnUse" - id="linearGradient35488" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.562462" - x2="262.43726" - y1="80.515495" - x1="256.38586" - gradientUnits="userSpaceOnUse" - id="linearGradient35490" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient35492" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient35494" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - gradientTransform="matrix(0.656002,0,0,0.656002,88.923481,27.003843)" - gradientUnits="userSpaceOnUse" - r="3.779551" - fy="79.598709" - fx="257.35309" - cy="79.598709" - cx="257.35309" - id="radialGradient35967" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientUnits="userSpaceOnUse" - id="linearGradient18478" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="translate(-97.983877,565.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient18480" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="173.23431" - x2="16.173666" - y1="158.14117" - x1="35.597904" - gradientTransform="matrix(0.707654,0,0,0.707942,43.55464,-148.13985)" - gradientUnits="userSpaceOnUse" - id="linearGradient18739" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="334.86029" - x2="-10.869003" - y1="333.22653" - x1="-12.264804" - gradientTransform="matrix(0.5990464,-0.03583042,0.03242597,0.6546824,59.652868,-253.61658)" - gradientUnits="userSpaceOnUse" - id="linearGradient18741" - xlink:href="#linearGradient4343" - inkscape:collect="always" /> - <linearGradient - y2="-182" - x2="-189.34792" - y1="-180.13821" - x1="-190.37566" - gradientTransform="translate(250.01612,148)" - gradientUnits="userSpaceOnUse" - id="linearGradient18743" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="164.51399" - x2="75.32457" - y1="164.51399" - x1="42.033173" - gradientTransform="matrix(1,0,0,1.172144,-461,-82.584001)" - gradientUnits="userSpaceOnUse" - id="linearGradient19045" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="157.54283" - x2="85.577972" - y1="157.11609" - x1="118.1319" - gradientTransform="translate(298,-53.749881)" - gradientUnits="userSpaceOnUse" - id="linearGradient19047" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-268.04858" - x2="-279.44821" - y1="-274.23453" - x1="-285.65732" - gradientTransform="matrix(1.3333334,0,0,0.8333334,767.51613,327.08335)" - gradientUnits="userSpaceOnUse" - id="linearGradient19049" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-27.882322" - x2="4.952816" - y1="-33.408295" - x1="-0.78523314" - gradientUnits="userSpaceOnUse" - id="linearGradient35583" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-29.550003" - x2="3.1666665" - y1="-33.408295" - x1="-0.78523314" - gradientUnits="userSpaceOnUse" - id="linearGradient35585" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-29.488832" - x2="2.6932251" - y1="-35.5" - x1="-3.5" - gradientUnits="userSpaceOnUse" - id="linearGradient35587" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-32.351803" - x2="4.8398785e-016" - y1="-29.678047" - x1="4.9341426" - gradientUnits="userSpaceOnUse" - id="linearGradient35589" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-28.597046" - x2="4.2000003" - y1="-32.317398" - x1="0.5079475" - gradientUnits="userSpaceOnUse" - id="linearGradient35591" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-36.441402" - x2="-4.375" - y1="-28.1" - x1="2.8144052" - gradientUnits="userSpaceOnUse" - id="linearGradient35593" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="-32" - x2="1.1666667" - y1="-35.5" - x1="-2.7708333" - gradientUnits="userSpaceOnUse" - id="linearGradient35595" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="176.41806" - x2="10.490564" - y1="158.14117" - x1="35.597904" - gradientTransform="matrix(0.707654,0,0,0.707942,-206.46148,-296.13985)" - gradientUnits="userSpaceOnUse" - id="linearGradient35740" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-35" - x2="40" - y1="-23.721956" - x1="58.060974" - gradientUnits="userSpaceOnUse" - id="linearGradient35742" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-33.59375" - x2="41.099998" - y1="-28.59375" - x1="46.1875" - gradientUnits="userSpaceOnUse" - id="linearGradient35744" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-33.939339" - x2="43.883884" - y1="-32" - x1="46" - gradientUnits="userSpaceOnUse" - id="linearGradient35746" - xlink:href="#linearGradient36116" - inkscape:collect="always" /> - <linearGradient - y2="-27" - x2="43" - y1="-29" - x1="41" - gradientUnits="userSpaceOnUse" - id="linearGradient35748" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-32.337086" - x2="43.47097" - y1="-27.071922" - x1="48.662914" - gradientUnits="userSpaceOnUse" - id="linearGradient35750" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-28.640625" - x2="41.200001" - y1="-30.799999" - x1="39.200001" - gradientTransform="translate(6.3,-4.7)" - gradientUnits="userSpaceOnUse" - id="linearGradient35752" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-28.765625" - x2="41.325001" - y1="-30.799999" - x1="39.200001" - gradientTransform="translate(5.315625,-3.75)" - gradientUnits="userSpaceOnUse" - id="linearGradient35754" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-29.799999" - x2="40.012501" - y1="-31.299999" - x1="38.700001" - gradientTransform="translate(3.3,0.3)" - gradientUnits="userSpaceOnUse" - id="linearGradient35756" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(-0.75,4.75)" - y2="-35.75" - x2="40.75" - y1="-24.696922" - x1="51.912914" - gradientUnits="userSpaceOnUse" - id="linearGradient35772" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="116.31882" - x2="130.7244" - y1="120.04005" - x1="135.32962" - gradientUnits="userSpaceOnUse" - id="linearGradient51774" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="129.27184" - x2="143.88347" - y1="115.23484" - x1="130.9015" - gradientUnits="userSpaceOnUse" - id="linearGradient51776" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="46.679707" - x2="111.53449" - y1="50.778313" - x1="107.78085" - gradientTransform="matrix(0.9993234,0,0,1.0050357,111.43697,300.37199)" - gradientUnits="userSpaceOnUse" - id="linearGradient51804" - xlink:href="#linearGradient8864" - inkscape:collect="always" /> - <linearGradient - y2="51.021076" - x2="112.87534" - y1="51.021076" - x1="115.37703" - gradientTransform="matrix(0.9993234,0,0,1.0050357,111.55698,300.497)" - gradientUnits="userSpaceOnUse" - id="linearGradient51806" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="50.963791" - x2="108.07208" - y1="50.963791" - x1="110.57378" - gradientTransform="matrix(0.9993234,0,0,1.0050357,111.35699,300.55457)" - gradientUnits="userSpaceOnUse" - id="linearGradient51808" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="237.27565" - x2="0.92051411" - y1="241.78653" - x1="-13.691219" - gradientTransform="matrix(0.5192341,-0.5192341,0.5184617,0.5184617,100.36783,218.31526)" - gradientUnits="userSpaceOnUse" - id="linearGradient51810" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="240.68927" - x2="-2.9318311" - y1="249.96617" - x1="-9.0782614" - gradientTransform="matrix(0.5192341,-0.5192341,0.5184617,0.5184617,100.13133,218.33837)" - gradientUnits="userSpaceOnUse" - id="linearGradient51812" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="248.125" - x2="-8.5254431" - y1="251.51265" - x1="-5.3499999" - gradientTransform="translate(439.89375,-187.79999)" - gradientUnits="userSpaceOnUse" - id="linearGradient68937" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="242.8" - x2="-13.091064" - y1="245.89999" - x1="-10.35" - gradientTransform="translate(439.89375,-187.79999)" - gradientUnits="userSpaceOnUse" - id="linearGradient68939" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="244.11874" - x2="-15.758821" - y1="240.10526" - x1="-41.065678" - gradientUnits="userSpaceOnUse" - id="linearGradient68941" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="246.7774" - x2="-7.0786314" - y1="237.9574" - x1="-10.991813" - gradientTransform="translate(440.2082,-188.0039)" - gradientUnits="userSpaceOnUse" - id="linearGradient68943" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="251.35759" - x2="-14.193665" - y1="244.08765" - x1="-5.1338587" - gradientTransform="translate(439.9582,-188.0039)" - gradientUnits="userSpaceOnUse" - id="linearGradient68945" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="245.68124" - x2="-3.321322" - y1="247.38559" - x1="-15.6" - gradientUnits="userSpaceOnUse" - id="linearGradient68947" - xlink:href="#linearGradient8864" - inkscape:collect="always" /> - <linearGradient - y2="248.125" - x2="-8.7065439" - y1="251.51265" - x1="-5.3499999" - gradientUnits="userSpaceOnUse" - id="linearGradient68949" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="242.81946" - x2="-13.125" - y1="245.89999" - x1="-10.35" - gradientUnits="userSpaceOnUse" - id="linearGradient68951" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="237.27565" - x2="0.92051411" - y1="240.79787" - x1="-12.538609" - gradientTransform="translate(0.25,0.2058042)" - gradientUnits="userSpaceOnUse" - id="linearGradient68953" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="239.86711" - x2="-1.7751017" - y1="247.4906" - x1="-7.20822" - gradientUnits="userSpaceOnUse" - id="linearGradient68955" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="47.176472" - x2="582" - y1="49.294117" - x1="582" - gradientTransform="matrix(1.5466301,0,0,1.6489946,-293.01107,-16.485383)" - gradientUnits="userSpaceOnUse" - id="linearGradient69009" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="94" - x2="247" - y1="99" - x1="247" - gradientTransform="translate(12.999999,359)" - gradientUnits="userSpaceOnUse" - id="linearGradient20269" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="94.440376" - x2="245.80791" - y1="106.28436" - x1="245.63066" - gradientTransform="translate(15.081669,359)" - gradientUnits="userSpaceOnUse" - id="linearGradient20275" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="460.5" - x2="263.5" - y1="455.25" - x1="263.5" - id="linearGradient20283" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(1,0,0,0.6,-5,182.8)" - y2="460.6622" - x2="264" - y1="452" - x1="264" - gradientUnits="userSpaceOnUse" - id="linearGradient20303" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="459" - x2="256" - y1="462" - x1="268" - id="linearGradient20309" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="358.85715" - x2="772" - y1="354.28479" - x1="771.0965" - gradientTransform="matrix(1,0,0,1.1666667,-737,357.33333)" - gradientUnits="userSpaceOnUse" - id="linearGradient23595" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - id="linearGradient39155"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop39157" /> - <stop - style="stop-color:#dadada;stop-opacity:1;" - offset="1" - id="stop39159" /> - </linearGradient> - <linearGradient - y2="56.357628" - x2="121.22078" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient38718" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="341" - x2="-49" - y1="342.0625" - x1="-56.5" - gradientTransform="translate(207,-246.99988)" - gradientUnits="userSpaceOnUse" - id="linearGradient38721" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="77" - x2="177" - y1="71" - x1="171" - gradientUnits="userSpaceOnUse" - id="linearGradient39281" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="76.182281" - x2="176.40117" - y1="74.972061" - x1="175.17659" - gradientTransform="matrix(1.1944456,0,0,1.2000039,-34.222431,-14.950295)" - gradientUnits="userSpaceOnUse" - id="linearGradient39283" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="76.210785" - x2="176.15442" - y1="64.53186" - x1="165.19363" - gradientUnits="userSpaceOnUse" - id="linearGradient39285" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="75.947906" - x2="176.84593" - y1="69.838829" - x1="172.30418" - gradientTransform="matrix(1.1718933,0,0,1.127086,-30.219387,-9.3173845)" - gradientUnits="userSpaceOnUse" - id="linearGradient39287" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="77" - x2="177" - y1="70" - x1="171" - gradientUnits="userSpaceOnUse" - id="linearGradient39289" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="75.947906" - x2="176.84593" - y1="74.125008" - x1="175.1628" - gradientTransform="matrix(1.1718933,0,0,1.127086,-30.219387,-9.3173845)" - gradientUnits="userSpaceOnUse" - id="linearGradient39291" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="77" - x2="177" - y1="70" - x1="171" - gradientUnits="userSpaceOnUse" - id="linearGradient39293" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="75.947906" - x2="176.84593" - y1="74.125008" - x1="175.1628" - gradientTransform="matrix(1.1718933,0,0,1.127086,-30.219387,-9.3173845)" - gradientUnits="userSpaceOnUse" - id="linearGradient39295" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient39008" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient39010" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient39012" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient39014" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient39016" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient39018" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient39020" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient39022" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="126.37626" - x2="273.9993" - y1="108.02418" - x1="260.67468" - gradientTransform="matrix(1,0,0,0.7972867,61.99991,2.2419)" - gradientUnits="userSpaceOnUse" - id="linearGradient39024" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="430.25" - x2="1153.0486" - y1="448.375" - x1="1127.7983" - id="linearGradient39026" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="117.10313" - x2="130.10634" - y1="134.65511" - x1="146.82516" - gradientUnits="userSpaceOnUse" - id="linearGradient57417" - xlink:href="#linearGradient14418" - inkscape:collect="always" /> - <linearGradient - y2="118.34238" - x2="131.71249" - y1="126.3454" - x1="139.37782" - gradientUnits="userSpaceOnUse" - id="linearGradient57419" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="119.54019" - x2="132.46898" - y1="110.86718" - x1="125.01582" - gradientUnits="userSpaceOnUse" - id="linearGradient57421" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="126.72997" - x2="140.72693" - y1="112.12571" - x1="127.60629" - gradientUnits="userSpaceOnUse" - id="linearGradient57423" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="391.5" - x2="73.5" - y1="393.25" - x1="75.25" - gradientTransform="translate(258.00306,-231.00101)" - gradientUnits="userSpaceOnUse" - id="linearGradient57454" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="12.551482" - x2="167.59578" - y1="12.918247" - x1="174.99828" - gradientTransform="matrix(1.728189,0,0,1.727271,-357.88848,243.63713)" - gradientUnits="userSpaceOnUse" - id="linearGradient22891" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="8.1183796" - x2="169.47711" - y1="10.424105" - x1="169.47711" - gradientTransform="matrix(1.728189,0,0,1.727271,-357.88848,243.63713)" - gradientUnits="userSpaceOnUse" - id="linearGradient22893" - xlink:href="#linearGradient30124" - inkscape:collect="always" /> - <linearGradient - y2="7.9604731" - x2="169.4877" - y1="10.306772" - x1="169.41847" - gradientTransform="matrix(-1.728189,0,0,1.727271,237.88848,243.63713)" - gradientUnits="userSpaceOnUse" - id="linearGradient22895" - xlink:href="#linearGradient30124" - inkscape:collect="always" /> - <linearGradient - y2="19.34374" - x2="160.31258" - y1="11.99999" - x1="145.00008" - gradientTransform="translate(-215.00008,249.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient22897" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="19.12499" - x2="171.37508" - y1="10.924165" - x1="149.00008" - gradientTransform="translate(-215.00008,249.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient22899" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="265.53439" - x2="-56" - y1="263" - x1="-68.25" - gradientUnits="userSpaceOnUse" - id="linearGradient22901" - xlink:href="#linearGradient32842" - inkscape:collect="always" /> - <linearGradient - y2="264.75" - x2="-57" - y1="264" - x1="-66" - gradientUnits="userSpaceOnUse" - id="linearGradient22903" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="12.36799" - x2="169.47711" - y1="12.946938" - x1="176.42079" - gradientTransform="matrix(1.728189,0,0,1.727271,-357.88848,243.63713)" - gradientUnits="userSpaceOnUse" - id="linearGradient22905" - xlink:href="#linearGradient32998" - inkscape:collect="always" /> - <linearGradient - y2="94.440376" - x2="245.80791" - y1="106.28436" - x1="245.63066" - gradientTransform="translate(15.081669,359)" - gradientUnits="userSpaceOnUse" - id="linearGradient22933" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="459" - x2="256" - y1="462" - x1="268" - gradientUnits="userSpaceOnUse" - id="linearGradient22935" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="94" - x2="247" - y1="99" - x1="247" - gradientTransform="translate(12.999999,359)" - gradientUnits="userSpaceOnUse" - id="linearGradient22937" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="460.5" - x2="263.5" - y1="455.25" - x1="263.5" - gradientUnits="userSpaceOnUse" - id="linearGradient22939" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="460.6622" - x2="264" - y1="452" - x1="264" - gradientTransform="matrix(1,0,0,0.6,-5,182.8)" - gradientUnits="userSpaceOnUse" - id="linearGradient22941" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="409" - x2="-191" - y1="399.90625" - x1="-197.84375" - id="linearGradient22970" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="162.94037" - x2="476.76578" - y1="163.08553" - x1="480.09564" - gradientTransform="translate(-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient23241" - xlink:href="#linearGradient19625" - inkscape:collect="always" /> - <linearGradient - y2="-218.00888" - x2="134.30893" - y1="-219.24783" - x1="123.36729" - gradientTransform="translate(342.00029,383.00889)" - gradientUnits="userSpaceOnUse" - id="linearGradient23243" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <radialGradient - r="3.500145" - fy="164.46814" - fx="470.15939" - cy="164.46814" - cx="470.15939" - gradientTransform="matrix(1.0982561,0,0,1.2662999,-45.858153,-42.45126)" - gradientUnits="userSpaceOnUse" - id="radialGradient23245" - xlink:href="#linearGradient12678" - inkscape:collect="always" /> - <linearGradient - y2="118.69846" - x2="132.35237" - y1="115.77483" - x1="128.7561" - gradientUnits="userSpaceOnUse" - id="linearGradient23247" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="124.69373" - x2="138.30522" - y1="111.48133" - x1="127.30917" - gradientUnits="userSpaceOnUse" - id="linearGradient23250" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="162.92206" - x2="475.50031" - y1="163.08553" - x1="480.09564" - gradientTransform="translate(-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient23445" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="-218.00888" - x2="134.30893" - y1="-219.24783" - x1="123.36729" - gradientTransform="translate(342.00029,383.00889)" - gradientUnits="userSpaceOnUse" - id="linearGradient23447" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="15.699567" - x2="175.38158" - y1="12.147777" - x1="172.37032" - gradientTransform="matrix(1.728189,0,0,1.727271,-142.8884,-5.3628832)" - gradientUnits="userSpaceOnUse" - id="linearGradient23531" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="19.99999" - x2="158.41653" - y1="16.845156" - x1="155.82454" - gradientUnits="userSpaceOnUse" - id="linearGradient23533" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="16.202652" - x2="175.33569" - y1="11.121979" - x1="171.03941" - gradientTransform="matrix(1.727201,9.075096e-6,0,1.728246,-147.7149,-10.37485)" - gradientUnits="userSpaceOnUse" - id="linearGradient40843" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="16.427906" - x2="176.46956" - y1="11.912162" - x1="172.18394" - gradientTransform="matrix(1.728189,0,0,1.727271,-142.8884,-5.3628832)" - gradientUnits="userSpaceOnUse" - id="linearGradient40845" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="19.99999" - x2="159.00008" - y1="16.99999" - x1="156.00008" - gradientUnits="userSpaceOnUse" - id="linearGradient40847" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="258.38593" - x2="96.812675" - y1="223.54628" - x1="62.107086" - gradientTransform="translate(-20,14)" - gradientUnits="userSpaceOnUse" - id="linearGradient40965" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="234.7775" - x2="60.155113" - y1="253.5" - x1="79.04213" - gradientTransform="translate(-21)" - gradientUnits="userSpaceOnUse" - id="linearGradient40967" - xlink:href="#linearGradient32842" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="-111.15749" - x2="204.01923" - y1="-133.89581" - x1="208.25" - id="linearGradient24098" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="93.805557" - x1="47.655102" - gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.3008215,-8.6726798)" - gradientUnits="userSpaceOnUse" - id="linearGradient23510" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="64.995972" - x2="117.55341" - y1="57.061836" - x1="110.16959" - gradientTransform="matrix(1.728189,0,0,1.727271,-142.53857,-4.802156)" - gradientUnits="userSpaceOnUse" - id="linearGradient23512" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="100.44998" - x2="54.252415" - y1="93.555946" - x1="47.612946" - gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.3010161,-8.6726854)" - gradientUnits="userSpaceOnUse" - id="linearGradient23514" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="266.99997" - x2="510" - y1="275.27036" - x1="468.07968" - gradientTransform="translate(1,0.01738631)" - gradientUnits="userSpaceOnUse" - id="linearGradient23550" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="270.36874" - x2="496.73859" - y1="267.42996" - x1="492.95264" - gradientTransform="translate(1,3.959006e-5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23555" - xlink:href="#linearGradient18105" - inkscape:collect="always" /> - <linearGradient - y2="55.747272" - x2="103.18628" - y1="52.264809" - x1="116.75796" - gradientTransform="matrix(0.9993234,0,0,1.0050357,404.07104,216.722)" - gradientUnits="userSpaceOnUse" - id="linearGradient23581" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="274" - x2="477" - y1="270.24997" - x1="500.71924" - gradientTransform="translate(1,-1.0000037)" - gradientUnits="userSpaceOnUse" - id="linearGradient23585" - xlink:href="#linearGradient21327" - inkscape:collect="always" /> - <radialGradient - r="4.4262571" - fy="375.96332" - fx="412.10059" - cy="375.96332" - cx="412.10059" - gradientTransform="matrix(0.5274943,0,0,0.7696585,194.81546,86.715119)" - gradientUnits="userSpaceOnUse" - id="radialGradient23610" - xlink:href="#linearGradient32842" - inkscape:collect="always" /> - <radialGradient - r="3.8798895" - fy="52.367992" - fx="409.55594" - cy="52.367992" - cx="409.55594" - gradientTransform="matrix(1.0009003,-1.5278593,1.1592123,0.7594114,-59.938837,957.7287)" - gradientUnits="userSpaceOnUse" - id="radialGradient23612" - xlink:href="#linearGradient24343" - inkscape:collect="always" /> - <linearGradient - y2="101.25028" - x2="56.524509" - y1="93.555946" - x1="47.612946" - gradientTransform="matrix(1.1004102,0,0,1.0993832,461.68129,182.37748)" - gradientUnits="userSpaceOnUse" - id="linearGradient23562" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="58.354706" - x2="106.20376" - y1="58.869785" - x1="115.45872" - gradientTransform="matrix(1.728803,0,0,1.7265713,323.39462,186.24644)" - gradientUnits="userSpaceOnUse" - id="linearGradient23565" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="63.567348" - x2="115.53827" - y1="56.645538" - x1="110.54202" - gradientTransform="matrix(1.728803,0,0,1.7265713,347.39462,166.24644)" - gradientUnits="userSpaceOnUse" - id="linearGradient22847" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="93.805557" - x1="47.655102" - gradientTransform="matrix(0.2445337,0,0,1.5876961,523.20711,115.4619)" - gradientUnits="userSpaceOnUse" - id="linearGradient22849" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.98901" - x2="34.276955" - y1="100.66651" - x1="29.506693" - gradientTransform="matrix(1.1004102,0,0,1.0993832,503.28129,157.47747)" - gradientUnits="userSpaceOnUse" - id="linearGradient22851" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient24052" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient24054" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient24056" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(-259,202)" - gradientUnits="userSpaceOnUse" - y2="132.60213" - x2="202.5" - y1="143.84116" - x1="202.5" - id="linearGradient24066" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <radialGradient - r="1.5" - fy="14.5" - fx="70.5" - cy="14.5" - cx="70.5" - gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)" - gradientUnits="userSpaceOnUse" - id="radialGradient23738" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="148.69533" - x2="433.5" - y1="148.90862" - x1="445.5" - gradientTransform="matrix(1,0,0,1.172144,59.49999,53.45766)" - gradientUnits="userSpaceOnUse" - id="linearGradient23750" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="158.24994" - x2="91.499992" - y1="158.24995" - x1="113.71248" - gradientTransform="matrix(0.6499984,0,0,0.5439483,434.02514,137.87435)" - gradientUnits="userSpaceOnUse" - id="linearGradient23752" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-268.04858" - x2="-279.44821" - y1="-274.23453" - x1="-285.65732" - gradientTransform="matrix(1.0052083,0,0,0.5057472,778.49218,365.83334)" - gradientUnits="userSpaceOnUse" - id="linearGradient23754" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="164.13913" - x2="32.928555" - y1="160.18758" - x1="29.200638" - gradientUnits="userSpaceOnUse" - id="linearGradient23914" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="5" - fy="81.275032" - fx="11.708446" - cy="81.275032" - cx="11.708446" - gradientTransform="matrix(0.02887268,-1.2550276,0.795821,0.01830762,8.763469,168.20647)" - gradientUnits="userSpaceOnUse" - id="radialGradient23916" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="5" - fy="82.433929" - fx="4.7455525" - cy="82.433929" - cx="4.7455525" - gradientTransform="matrix(0.01269957,-0.9297674,1.1086869,0.01514236,-16.51473,165.70609)" - gradientUnits="userSpaceOnUse" - id="radialGradient23918" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="152.24998" - x2="-80" - y1="151" - x1="-80" - gradientTransform="translate(383,-37.999994)" - gradientUnits="userSpaceOnUse" - id="linearGradient24460" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="152.24998" - x2="-80" - y1="151" - x1="-80" - gradientTransform="translate(360,-142.95536)" - gradientUnits="userSpaceOnUse" - id="linearGradient24470" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-22.846634" - x2="134.08138" - y1="-11.628862" - x1="154.24324" - gradientUnits="userSpaceOnUse" - id="linearGradient23971" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-23.945318" - x2="132.29695" - y1="-21.522242" - x1="134.12642" - gradientUnits="userSpaceOnUse" - id="linearGradient23973" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-24.343456" - x2="131.69801" - y1="-21.3074" - x1="134.6615" - gradientUnits="userSpaceOnUse" - id="linearGradient23975" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="-21" - x2="135.25" - y1="-18" - x1="137.5" - id="linearGradient24099" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="58.065113" - x2="127.70434" - y1="58.065113" - x1="107.39532" - gradientTransform="matrix(1.728189,0,0,1.727271,-142.53857,-4.802156)" - gradientUnits="userSpaceOnUse" - id="linearGradient24539" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="93.69249" - x2="65.52562" - y1="95.008034" - x1="30.389694" - gradientTransform="matrix(-1.1000194,0,0,1.0998287,110.29549,-8.6726854)" - gradientUnits="userSpaceOnUse" - id="linearGradient24541" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="162.85956" - x2="476.68781" - y1="163" - x1="483.00034" - gradientTransform="translate(-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient24543" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-218.00888" - x2="134.30893" - y1="-219.24783" - x1="123.36729" - gradientTransform="translate(342.00029,383.00889)" - gradientUnits="userSpaceOnUse" - id="linearGradient24545" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="155" - x2="469.75034" - y1="155" - x1="475.00034" - gradientUnits="userSpaceOnUse" - id="linearGradient24547" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="290.5249" - x2="436.5" - y1="290.49384" - x1="442.81525" - gradientTransform="translate(-6,-6e-5)" - gradientUnits="userSpaceOnUse" - id="linearGradient24549" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="407.3793" - y1="288.5" - x1="445.99902" - gradientUnits="userSpaceOnUse" - id="linearGradient24551" - xlink:href="#linearGradient18105" - inkscape:collect="always" /> - <linearGradient - y2="120.87388" - x2="135.36497" - y1="111.98244" - x1="124.40742" - gradientUnits="userSpaceOnUse" - id="linearGradient24112" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient24114" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="244.70323" - x2="308.82889" - y1="243.23151" - x1="302.84085" - gradientTransform="translate(0,1)" - gradientUnits="userSpaceOnUse" - id="linearGradient24116" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="116.60553" - x2="130.01318" - y1="115.90587" - x1="121.7408" - gradientTransform="matrix(0.6879084,0,0,0.6879446,216.19282,166.82605)" - gradientUnits="userSpaceOnUse" - id="linearGradient24118" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="117.15551" - x2="129.70906" - y1="122.92034" - x1="135.698" - gradientUnits="userSpaceOnUse" - id="linearGradient24121" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="129.27184" - x2="143.88347" - y1="111.81818" - x1="125.81818" - gradientUnits="userSpaceOnUse" - id="linearGradient24123" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="23.410421" - x2="180.11391" - y1="4.5569806" - x1="162.61801" - gradientTransform="translate(-93.937441,254)" - gradientUnits="userSpaceOnUse" - id="linearGradient24189" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(-94.937441,240)" - y2="32.144764" - x2="175.06059" - y1="23.749996" - x1="167.43744" - gradientUnits="userSpaceOnUse" - id="linearGradient24192" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="19" - x2="173.93744" - y1="12.306217" - x1="166.86487" - gradientTransform="translate(-93.937441,254)" - gradientUnits="userSpaceOnUse" - id="linearGradient24209" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(1,0,0,-0.985055,75.000075,275.63418)" - y2="9.0189686" - x2="189.24992" - y1="10.795519" - x1="186.74992" - gradientUnits="userSpaceOnUse" - id="linearGradient24268" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="154.24899" - x2="264.99994" - y1="148.24248" - x1="258.08322" - gradientTransform="matrix(1.2000005,0,0,1.1817719,-50.700005,86.809844)" - gradientUnits="userSpaceOnUse" - id="linearGradient24272" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="154.24899" - x2="264.99994" - y1="148.24248" - x1="258.08322" - gradientTransform="matrix(1.2000005,0,0,1.1817719,-50.700005,86.809844)" - gradientUnits="userSpaceOnUse" - id="linearGradient24277" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="277.4375" - x2="-39.875" - y1="268.76776" - x1="-27.5" - id="linearGradient24395" - xlink:href="#linearGradient21327" - inkscape:collect="always" /> - <linearGradient - y2="55.86327" - x2="402.30673" - y1="52.77837" - x1="409.45645" - gradientTransform="matrix(-1,0,0,1,594,-42.40625)" - gradientUnits="userSpaceOnUse" - id="linearGradient41127" - xlink:href="#linearGradient15893" - inkscape:collect="always" /> - <linearGradient - y2="12.942369" - x2="192.75177" - y1="8.0551176" - x1="180.20316" - gradientUnits="userSpaceOnUse" - id="linearGradient41129" - xlink:href="#linearGradient27957" - inkscape:collect="always" /> - <linearGradient - y2="230.76723" - x2="291.45029" - y1="199.60616" - x1="266.93381" - gradientTransform="matrix(1,0,0,0.9846154,-138.98388,3.9846124)" - gradientUnits="userSpaceOnUse" - id="linearGradient41170" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="224.1875" - x2="284.9375" - y1="200.66605" - x1="268.21783" - gradientTransform="translate(0.01612278)" - gradientUnits="userSpaceOnUse" - id="linearGradient41172" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2" - fy="197" - fx="269.99997" - cy="197" - cx="269.99997" - gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)" - gradientUnits="userSpaceOnUse" - id="radialGradient41174" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="157.99994" - x2="87.522514" - y1="158.24995" - x1="113.71248" - gradientTransform="translate(274,-63.999901)" - gradientUnits="userSpaceOnUse" - id="linearGradient41963" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="230.76723" - x2="291.45029" - y1="199.60616" - x1="266.93381" - gradientTransform="matrix(1,0,0,0.9846154,-138.98388,3.9846124)" - gradientUnits="userSpaceOnUse" - id="linearGradient42069" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2" - fy="197" - fx="269.99997" - cy="197" - cx="269.99997" - gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)" - gradientUnits="userSpaceOnUse" - id="radialGradient42091" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="196.576" - x2="265.70886" - y1="215.3125" - x1="276.39999" - gradientTransform="translate(0.01612278)" - gradientUnits="userSpaceOnUse" - id="linearGradient42093" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <radialGradient - r="2" - fy="197" - fx="269.99997" - cy="197" - cx="269.99997" - gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)" - gradientUnits="userSpaceOnUse" - id="radialGradient42115" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="549" - x2="212" - y1="535" - x1="206" - gradientTransform="translate(60,-342)" - gradientUnits="userSpaceOnUse" - id="linearGradient42121" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="239.89455" - x2="296.25" - y1="193.93752" - x1="263" - gradientTransform="matrix(1,0,0,0.9846154,-138.98388,3.9846124)" - gradientUnits="userSpaceOnUse" - id="linearGradient42155" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="232" - x2="290.98389" - y1="195" - x1="265.98389" - gradientTransform="translate(0.01612278)" - gradientUnits="userSpaceOnUse" - id="linearGradient42290" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2" - fy="197" - fx="269.99997" - cy="197" - cx="269.99997" - gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)" - gradientUnits="userSpaceOnUse" - id="radialGradient42292" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="253.62515" - x2="-57.772419" - y1="253.01927" - x1="1.6577729" - gradientTransform="matrix(0.9819031,0,0,0.9481466,-88.271503,-83.584533)" - gradientUnits="userSpaceOnUse" - id="linearGradient40722" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="60.125" - x2="116.99999" - y1="57.374996" - x1="107.84375" - gradientTransform="matrix(-0.977157,0,0,0.9835482,0.06815071,100.43848)" - gradientUnits="userSpaceOnUse" - id="linearGradient40724" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="254.94975" - x2="279.89563" - y1="214.40446" - x1="241.17908" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient40734" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="247.27646" - x2="73.932747" - y1="230.81766" - x1="49.543404" - gradientTransform="matrix(0.6025789,0,0,0.668336,263.48819,85.675422)" - gradientUnits="userSpaceOnUse" - id="linearGradient40736" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="242" - x2="308.97327" - y1="239.03134" - x1="305.12527" - gradientTransform="matrix(0.9120445,0,0,1,25.749745,8.9261515)" - gradientUnits="userSpaceOnUse" - id="linearGradient40738" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.35141" - x2="73.932762" - y1="229.19724" - x1="51.682816" - gradientTransform="matrix(0.584271,0,0,0.661005,267.80323,78.438648)" - gradientUnits="userSpaceOnUse" - id="linearGradient40740" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="241.62509" - x2="307.25021" - y1="239.03134" - x1="305.12527" - gradientTransform="matrix(0.9103441,0,0,0.989031,29.299938,2.5312404)" - gradientUnits="userSpaceOnUse" - id="linearGradient40742" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="259.99347" - x2="196.00264" - y1="294.81082" - x1="199.4335" - gradientTransform="translate(15.997359,-17.993456)" - gradientUnits="userSpaceOnUse" - id="linearGradient40758" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="250.25" - x2="207.81319" - y1="249.22464" - x1="207.19595" - gradientTransform="matrix(0.7501745,0,0,1.0021005,51.339144,-0.5240716)" - gradientUnits="userSpaceOnUse" - id="linearGradient40760" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="250.25" - x2="207.81319" - y1="249.22464" - x1="207.19595" - gradientTransform="matrix(0.7501745,0,0,1.0021005,59.339161,-0.5240716)" - gradientUnits="userSpaceOnUse" - id="linearGradient40762" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.52081" - x2="174.56255" - y1="217.52046" - x1="146.51619" - gradientTransform="matrix(1.043478,0,0,0.956667,-7.152175,20.92167)" - gradientUnits="userSpaceOnUse" - id="linearGradient40788" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="251.40294" - x2="96" - y1="242.39062" - x1="87.765625" - gradientTransform="translate(81.000002,13.499998)" - gradientUnits="userSpaceOnUse" - id="linearGradient40790" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="249.15927" - x2="170.71698" - y1="237.25" - x1="170.42908" - gradientUnits="userSpaceOnUse" - id="linearGradient40792" - xlink:href="#linearGradient18056" - inkscape:collect="always" /> - <linearGradient - y2="240.10249" - x2="168.5" - y1="249.55817" - x1="168.5625" - gradientTransform="translate(0,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient40794" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-2.5475447" - x2="293.80472" - y1="-16.946415" - x1="279.38629" - gradientUnits="userSpaceOnUse" - id="linearGradient40545" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="243.98439" - x2="29.429007" - y1="261.52924" - x1="43.921535" - gradientTransform="matrix(0.9230687,0,0,0.9230801,261.38476,-234.15464)" - gradientUnits="userSpaceOnUse" - id="linearGradient40547" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="411.78125" - x2="388.78125" - y1="410" - x1="387" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient22249" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="412.45016" - x2="389.14081" - y1="409.84152" - x1="386.88852" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient22251" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="411.88974" - x2="388.86676" - y1="409.86362" - x1="387" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient22253" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.16492" - x2="37.5" - y1="209.97131" - x1="-0.71355486" - gradientTransform="matrix(-0.9230769,0,0,-0.9258123,59.615385,471.81593)" - gradientUnits="userSpaceOnUse" - id="linearGradient23775" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="604.11108" - x2="77.111115" - y1="599.20789" - x1="72.698921" - gradientUnits="userSpaceOnUse" - id="linearGradient23777" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="250.99995" - x2="33.682159" - y1="204.24995" - x1="-7.445384" - gradientTransform="matrix(0.923955,0,0,1,82.8792,399.00004)" - gradientUnits="userSpaceOnUse" - id="linearGradient23351" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="168.00002" - x2="36.972481" - y1="164" - x1="29.972469" - gradientTransform="translate(80.02752,483.00004)" - gradientUnits="userSpaceOnUse" - id="linearGradient23353" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="644" - x2="111" - y1="646" - x1="113" - gradientTransform="translate(-224,-1290)" - gradientUnits="userSpaceOnUse" - id="linearGradient23355" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="644.5" - x2="111.5" - y1="646" - x1="113" - gradientUnits="userSpaceOnUse" - id="linearGradient23357" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(0.89375,0,0,0.89375,20.29375,17.10625)" - gradientUnits="userSpaceOnUse" - y2="167.67831" - x2="196.59441" - y1="158.72728" - x1="191" - id="linearGradient23599" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.6363637,0.6315788,0,-191.68403,523.2955)" - gradientUnits="userSpaceOnUse" - id="linearGradient22692" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(-0.6363637,0,0,-0.6315788,314.2955,837.68414)" - gradientUnits="userSpaceOnUse" - id="linearGradient22695" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.6363637,-0.6315788,0,628.68411,331.70458)" - gradientUnits="userSpaceOnUse" - id="linearGradient22698" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.6363637,0,0,0.6315788,122.70458,17.31597)" - gradientUnits="userSpaceOnUse" - id="linearGradient22701" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(-0.6363637,0,0,-0.6315788,311.11368,825.05254)" - gradientUnits="userSpaceOnUse" - id="linearGradient22704" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0,-0.6363637,0.6315788,0,-179.05245,520.11368)" - gradientUnits="userSpaceOnUse" - id="linearGradient22707" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0,0.6363637,-0.6315788,0,616.05253,334.8864)" - gradientUnits="userSpaceOnUse" - id="linearGradient22711" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0.6363637,0,0,0.6315788,125.8864,29.94755)" - gradientUnits="userSpaceOnUse" - id="linearGradient22715" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,0.6357342,-0.636363,0,628.0905,358.45254)" - gradientUnits="userSpaceOnUse" - id="linearGradient23132" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(-0.636363,0,0,-0.6357342,320.09081,851.14655)" - gradientUnits="userSpaceOnUse" - id="linearGradient23134" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,-0.6357342,0.636363,0,-173.09051,543.4512)" - gradientUnits="userSpaceOnUse" - id="linearGradient23136" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0.636363,0,0,0.6357342,134.90918,50.757191)" - gradientUnits="userSpaceOnUse" - id="linearGradient23138" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.636363,0,0,0.6357342,131.72737,31.593709)" - gradientUnits="userSpaceOnUse" - id="linearGradient23140" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.6357342,-0.636363,0,640.81777,348.82507)" - gradientUnits="userSpaceOnUse" - id="linearGradient23142" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.636363,0,0,-0.6357342,131.72737,857.41243)" - gradientUnits="userSpaceOnUse" - id="linearGradient23144" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.6357342,0.636363,0,-185.81777,540.18107)" - gradientUnits="userSpaceOnUse" - id="linearGradient23147" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(90,276.5,573.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23177" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(180,183,536)" - gradientUnits="userSpaceOnUse" - id="linearGradient23179" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(-90,89.5,498.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23181" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="translate(75,-187)" - gradientUnits="userSpaceOnUse" - id="linearGradient23183" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="translate(70,-207)" - gradientUnits="userSpaceOnUse" - id="linearGradient23185" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="rotate(90,289,581)" - gradientUnits="userSpaceOnUse" - id="linearGradient23187" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(1,0,0,-1,70,1092)" - gradientUnits="userSpaceOnUse" - id="linearGradient23189" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="rotate(-90,82,511)" - gradientUnits="userSpaceOnUse" - id="linearGradient23191" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.8181822,0.8181823,0,-304.90941,555.63645)" - gradientUnits="userSpaceOnUse" - id="linearGradient23231" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.8181823,0,0,-0.8181822,103.36356,963.90937)" - gradientUnits="userSpaceOnUse" - id="linearGradient23235" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.8181822,-0.8181823,0,757.9094,309.36361)" - gradientUnits="userSpaceOnUse" - id="linearGradient23239" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.8181823,0,0,0.8181822,103.36356,-98.909308)" - gradientUnits="userSpaceOnUse" - id="linearGradient23244" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0.8181823,0,0,0.8181822,107.45448,-82.54566)" - gradientUnits="userSpaceOnUse" - id="linearGradient23248" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,-0.8181822,0.8181823,0,-288.54575,551.54554)" - gradientUnits="userSpaceOnUse" - id="linearGradient23251" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(-0.8181823,0,0,-0.8181822,345.54553,947.54573)" - gradientUnits="userSpaceOnUse" - id="linearGradient23254" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,0.8181822,-0.8181823,0,741.54576,313.45452)" - gradientUnits="userSpaceOnUse" - id="linearGradient23257" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,0.8181822,-0.8181823,0,741.54576,313.45452)" - gradientUnits="userSpaceOnUse" - id="linearGradient23563" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(-0.8181823,0,0,-0.8181822,345.54553,947.54573)" - gradientUnits="userSpaceOnUse" - id="linearGradient23566" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,-0.8181822,0.8181823,0,-288.54575,551.54554)" - gradientUnits="userSpaceOnUse" - id="linearGradient23568" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0.8181823,0,0,0.8181822,107.45448,-82.54566)" - gradientUnits="userSpaceOnUse" - id="linearGradient23570" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.8181823,0,0,0.8181822,103.36356,-98.909308)" - gradientUnits="userSpaceOnUse" - id="linearGradient23572" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.8181822,-0.8181823,0,757.9094,309.36361)" - gradientUnits="userSpaceOnUse" - id="linearGradient23574" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.8181823,0,0,-0.8181822,103.36356,963.90937)" - gradientUnits="userSpaceOnUse" - id="linearGradient23576" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.8181822,0.8181823,0,-304.90941,555.63645)" - gradientUnits="userSpaceOnUse" - id="linearGradient23578" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(90,276.5,573.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23580" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(180,183,536)" - gradientUnits="userSpaceOnUse" - id="linearGradient23582" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(-90,89.5,498.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23587" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="translate(75,-187)" - gradientUnits="userSpaceOnUse" - id="linearGradient23589" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="translate(70,-207)" - gradientUnits="userSpaceOnUse" - id="linearGradient23591" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="rotate(90,289,581)" - gradientUnits="userSpaceOnUse" - id="linearGradient23593" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(1,0,0,-1,70,1092)" - gradientUnits="userSpaceOnUse" - id="linearGradient23597" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="rotate(-90,82,511)" - gradientUnits="userSpaceOnUse" - id="linearGradient23600" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0.6363637,0,0,0.6315788,125.8864,29.94755)" - gradientUnits="userSpaceOnUse" - id="linearGradient23602" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0,0.6363637,-0.6315788,0,616.05253,334.8864)" - gradientUnits="userSpaceOnUse" - id="linearGradient23606" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0,-0.6363637,0.6315788,0,-179.05245,520.11368)" - gradientUnits="userSpaceOnUse" - id="linearGradient23608" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(-0.6363637,0,0,-0.6315788,311.11368,825.05254)" - gradientUnits="userSpaceOnUse" - id="linearGradient23610" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.6363637,0,0,0.6315788,122.70458,17.31597)" - gradientUnits="userSpaceOnUse" - id="linearGradient23612" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.6363637,-0.6315788,0,628.68411,331.70458)" - gradientUnits="userSpaceOnUse" - id="linearGradient23616" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(-0.6363637,0,0,-0.6315788,314.2955,837.68414)" - gradientUnits="userSpaceOnUse" - id="linearGradient23618" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.6363637,0.6315788,0,-191.68403,523.2955)" - gradientUnits="userSpaceOnUse" - id="linearGradient23620" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,0.6357342,-0.636363,0,628.0905,358.45254)" - gradientUnits="userSpaceOnUse" - id="linearGradient23622" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(-0.636363,0,0,-0.6357342,320.09081,851.14655)" - gradientUnits="userSpaceOnUse" - id="linearGradient23624" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,-0.6357342,0.636363,0,-173.09051,543.4512)" - gradientUnits="userSpaceOnUse" - id="linearGradient23626" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0.636363,0,0,0.6357342,134.90918,50.757191)" - gradientUnits="userSpaceOnUse" - id="linearGradient23628" - xlink:href="#linearGradient20324" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.636363,0,0,0.6357342,131.72737,31.593709)" - gradientUnits="userSpaceOnUse" - id="linearGradient23630" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.6357342,-0.636363,0,640.81777,348.82507)" - gradientUnits="userSpaceOnUse" - id="linearGradient23632" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.636363,0,0,-0.6357342,131.72737,857.41243)" - gradientUnits="userSpaceOnUse" - id="linearGradient23635" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.6357342,0.636363,0,-185.81777,540.18107)" - gradientUnits="userSpaceOnUse" - id="linearGradient23637" - xlink:href="#linearGradient37623" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,0.8181822,-0.8181823,0,741.54576,313.45452)" - gradientUnits="userSpaceOnUse" - id="linearGradient23797" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(-0.8181823,0,0,-0.8181822,345.54553,947.54573)" - gradientUnits="userSpaceOnUse" - id="linearGradient23799" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,-0.8181822,0.8181823,0,-288.54575,551.54554)" - gradientUnits="userSpaceOnUse" - id="linearGradient23801" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0.8181823,0,0,0.8181822,107.45448,-82.54566)" - gradientUnits="userSpaceOnUse" - id="linearGradient23803" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.8181823,0,0,0.8181822,103.36356,-98.909308)" - gradientUnits="userSpaceOnUse" - id="linearGradient23805" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.8181822,-0.8181823,0,757.9094,309.36361)" - gradientUnits="userSpaceOnUse" - id="linearGradient23807" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.8181823,0,0,-0.8181822,103.36356,963.90937)" - gradientUnits="userSpaceOnUse" - id="linearGradient23809" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.8181822,0.8181823,0,-304.90941,555.63645)" - gradientUnits="userSpaceOnUse" - id="linearGradient23811" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(90,276.5,573.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23813" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(180,183,536)" - gradientUnits="userSpaceOnUse" - id="linearGradient23815" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="rotate(-90,89.5,498.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient23817" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="translate(75,-187)" - gradientUnits="userSpaceOnUse" - id="linearGradient23819" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="translate(70,-207)" - gradientUnits="userSpaceOnUse" - id="linearGradient23821" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="rotate(90,289,581)" - gradientUnits="userSpaceOnUse" - id="linearGradient23823" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(1,0,0,-1,70,1092)" - gradientUnits="userSpaceOnUse" - id="linearGradient23825" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="rotate(-90,82,511)" - gradientUnits="userSpaceOnUse" - id="linearGradient23827" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0.6363637,0,0,0.6315788,125.8864,29.94755)" - gradientUnits="userSpaceOnUse" - id="linearGradient23829" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0,0.6363637,-0.6315788,0,616.05253,334.8864)" - gradientUnits="userSpaceOnUse" - id="linearGradient23831" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(0,-0.6363637,0.6315788,0,-179.05245,520.11368)" - gradientUnits="userSpaceOnUse" - id="linearGradient23833" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.12494" - x2="145.53571" - y1="627.08325" - x1="145.53571" - gradientTransform="matrix(-0.6363637,0,0,-0.6315788,311.11368,825.05254)" - gradientUnits="userSpaceOnUse" - id="linearGradient23835" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.6363637,0,0,0.6315788,122.70458,17.31597)" - gradientUnits="userSpaceOnUse" - id="linearGradient23837" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.6363637,-0.6315788,0,628.68411,331.70458)" - gradientUnits="userSpaceOnUse" - id="linearGradient23839" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(-0.6363637,0,0,-0.6315788,314.2955,837.68414)" - gradientUnits="userSpaceOnUse" - id="linearGradient23841" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="641.54156" - x2="150.53571" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.6363637,0.6315788,0,-191.68403,523.2955)" - gradientUnits="userSpaceOnUse" - id="linearGradient23843" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,0.6357342,-0.636363,0,628.0905,358.45254)" - gradientUnits="userSpaceOnUse" - id="linearGradient23845" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(-0.636363,0,0,-0.6357342,320.09081,851.14655)" - gradientUnits="userSpaceOnUse" - id="linearGradient23847" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0,-0.6357342,0.636363,0,-173.09051,543.4512)" - gradientUnits="userSpaceOnUse" - id="linearGradient23849" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="623.5" - x2="145.5" - y1="627.5" - x1="145.5" - gradientTransform="matrix(0.636363,0,0,0.6357342,134.90918,50.757191)" - gradientUnits="userSpaceOnUse" - id="linearGradient23851" - xlink:href="#linearGradient24632" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.636363,0,0,0.6357342,131.72737,31.593709)" - gradientUnits="userSpaceOnUse" - id="linearGradient23853" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,0.6357342,-0.636363,0,640.81777,348.82507)" - gradientUnits="userSpaceOnUse" - id="linearGradient23856" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0.636363,0,0,-0.6357342,131.72737,857.41243)" - gradientUnits="userSpaceOnUse" - id="linearGradient23858" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="642" - x2="150.5" - y1="647.75" - x1="150.5" - gradientTransform="matrix(0,-0.6357342,0.636363,0,-185.81777,540.18107)" - gradientUnits="userSpaceOnUse" - id="linearGradient23860" - xlink:href="#linearGradient24642" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="273" - y1="388" - x1="258" - gradientTransform="translate(-52.983883,-129)" - gradientUnits="userSpaceOnUse" - id="linearGradient42685" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="273" - y1="388" - x1="259.75" - gradientTransform="translate(-48.983883,-126)" - gradientUnits="userSpaceOnUse" - id="linearGradient42687" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="279" - y1="388" - x1="258.52756" - gradientTransform="translate(-54.000005,-120)" - gradientUnits="userSpaceOnUse" - id="linearGradient42689" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="272" - y1="388" - x1="257.75" - gradientTransform="translate(-46.000005,-117)" - gradientUnits="userSpaceOnUse" - id="linearGradient42691" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.15624" - x2="34.095703" - y1="100.99999" - x1="29.4034" - gradientTransform="translate(220,-20.00667)" - gradientUnits="userSpaceOnUse" - id="linearGradient22892" - xlink:href="#linearGradient23705" - inkscape:collect="always" /> - <linearGradient - y2="95.252274" - x2="250.5" - y1="90.253998" - x1="250.5" - gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)" - gradientUnits="userSpaceOnUse" - id="linearGradient22917" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="332.10181" - fx="135.14931" - cy="332.10181" - cx="135.14931" - gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)" - gradientUnits="userSpaceOnUse" - id="radialGradient22922" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.14744" - x2="35.166668" - y1="90.504448" - x1="27.166666" - gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)" - gradientUnits="userSpaceOnUse" - id="linearGradient22928" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.20956" - fx="75.53241" - cy="500.20956" - cx="75.53241" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient22950" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="74.072273" - fx="262.67139" - cy="74.072273" - cx="262.67139" - gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)" - gradientUnits="userSpaceOnUse" - id="radialGradient22952" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="104.89799" - x2="34.125" - y1="88.642494" - x1="20.125" - gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)" - gradientUnits="userSpaceOnUse" - id="linearGradient22954" - xlink:href="#linearGradient24168" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="333.05716" - fx="140.33667" - cy="333.05716" - cx="140.33667" - gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)" - gradientUnits="userSpaceOnUse" - id="radialGradient23727" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.15624" - x2="34.095703" - y1="100.99999" - x1="29.4034" - gradientTransform="translate(220,-20.00667)" - gradientUnits="userSpaceOnUse" - id="linearGradient23890" - xlink:href="#linearGradient37925" - inkscape:collect="always" /> - <linearGradient - y2="104.89799" - x2="34.125" - y1="88.642494" - x1="20.125" - gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)" - gradientUnits="userSpaceOnUse" - id="linearGradient23892" - xlink:href="#linearGradient22562" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="74.306007" - fx="262.07156" - cy="74.306007" - cx="262.07156" - gradientTransform="matrix(1.0553103,1.0606182,-1.2516598,1.280294,67.321819,-297.60493)" - gradientUnits="userSpaceOnUse" - id="radialGradient23894" - xlink:href="#linearGradient23906" - inkscape:collect="always" /> - <linearGradient - y2="101.14744" - x2="35.166668" - y1="90.504448" - x1="27.166666" - gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)" - gradientUnits="userSpaceOnUse" - id="linearGradient23896" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.20956" - fx="75.53241" - cy="500.20956" - cx="75.53241" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient23898" - xlink:href="#linearGradient14232" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="332.10181" - fx="135.14931" - cy="332.10181" - cx="135.14931" - gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)" - gradientUnits="userSpaceOnUse" - id="radialGradient23900" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="95.252274" - x2="250.5" - y1="90.253998" - x1="250.5" - gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)" - gradientUnits="userSpaceOnUse" - id="linearGradient23902" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="333.05716" - fx="140.33667" - cy="333.05716" - cx="140.33667" - gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)" - gradientUnits="userSpaceOnUse" - id="radialGradient23904" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.15624" - x2="34.095703" - y1="100.99999" - x1="29.4034" - gradientTransform="translate(220,-20.00667)" - gradientUnits="userSpaceOnUse" - id="linearGradient24090" - xlink:href="#linearGradient42459" - inkscape:collect="always" /> - <linearGradient - y2="104.89799" - x2="34.125" - y1="88.642494" - x1="20.125" - gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)" - gradientUnits="userSpaceOnUse" - id="linearGradient24092" - xlink:href="#linearGradient22562" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="74.441246" - fx="263.21707" - cy="74.441246" - cx="263.21707" - gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)" - gradientUnits="userSpaceOnUse" - id="radialGradient24094" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.14744" - x2="35.166668" - y1="90.504448" - x1="27.166666" - gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)" - gradientUnits="userSpaceOnUse" - id="linearGradient24096" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.20956" - fx="75.53241" - cy="500.20956" - cx="75.53241" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient24098" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="332.10181" - fx="135.14931" - cy="332.10181" - cx="135.14931" - gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)" - gradientUnits="userSpaceOnUse" - id="radialGradient24100" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="95.252274" - x2="250.5" - y1="90.253998" - x1="250.5" - gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)" - gradientUnits="userSpaceOnUse" - id="linearGradient24102" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="333.05716" - fx="140.33667" - cy="333.05716" - cx="140.33667" - gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)" - gradientUnits="userSpaceOnUse" - id="radialGradient24104" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.05081" - x2="76.956871" - y1="239.83469" - x1="71.762154" - gradientTransform="matrix(0.831045,0,0,0.776773,36.146465,141.05131)" - gradientUnits="userSpaceOnUse" - id="linearGradient24317" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="246.81651" - x2="73.234337" - y1="243.03008" - x1="72.340698" - gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)" - gradientUnits="userSpaceOnUse" - id="linearGradient24319" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="246.96069" - x2="68.458534" - y1="240.03282" - x1="66.954422" - gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)" - gradientUnits="userSpaceOnUse" - id="linearGradient24321" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="179.12285" - x2="425" - y1="179.12074" - x1="426.12415" - gradientTransform="translate(-335,238.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient24362" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="266.34406" - x2="237.75459" - y1="285.00754" - x1="244.37868" - gradientTransform="translate(-149,133.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient24367" - xlink:href="#linearGradient24143" - inkscape:collect="always" /> - <linearGradient - y2="260.21841" - x2="116.37123" - y1="281.26645" - x1="120.97597" - gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)" - gradientUnits="userSpaceOnUse" - id="linearGradient24374" - xlink:href="#linearGradient24695" - inkscape:collect="always" /> - <linearGradient - y2="287.50357" - x2="212.22493" - y1="272.29477" - x1="199.87271" - gradientTransform="matrix(1,0,0,-1,-150.99992,596.00357)" - gradientUnits="userSpaceOnUse" - id="linearGradient24436" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="250.69945" - x2="114.66669" - y1="283.00519" - x1="121.79003" - gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)" - gradientUnits="userSpaceOnUse" - id="linearGradient25073" - xlink:href="#linearGradient24679" - inkscape:collect="always" /> - <linearGradient - y2="253.00755" - x2="235" - y1="283.94504" - x1="243.25" - gradientTransform="translate(-149,133.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient25075" - xlink:href="#linearGradient24671" - inkscape:collect="always" /> - <linearGradient - y2="179.12285" - x2="425" - y1="179.12074" - x1="426.12415" - gradientTransform="translate(-335,238.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient25077" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="250.69945" - x2="114.66669" - y1="281.27435" - x1="120.94298" - gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)" - gradientUnits="userSpaceOnUse" - id="linearGradient42055" - xlink:href="#linearGradient24679" - inkscape:collect="always" /> - <linearGradient - y2="253.00755" - x2="235" - y1="283.94504" - x1="243.25" - gradientTransform="translate(-149,133.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient42057" - xlink:href="#linearGradient24671" - inkscape:collect="always" /> - <linearGradient - y2="179.12285" - x2="425" - y1="179.12074" - x1="426.12415" - gradientTransform="translate(-335,238.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient42059" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="84.777061" - x2="426.11459" - y1="113.24564" - x1="445.77841" - gradientUnits="userSpaceOnUse" - id="linearGradient24132" - xlink:href="#linearGradient24101" - inkscape:collect="always" /> - <radialGradient - r="7.03125" - fy="237.2262" - fx="269.71231" - cy="237.2262" - cx="269.71231" - gradientTransform="matrix(1.1489145,-0.69297,0.4772363,0.7912359,-113.08929,303.20064)" - gradientUnits="userSpaceOnUse" - id="radialGradient24599" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="7.03125" - fy="245.91792" - fx="262.83905" - cy="245.91792" - cx="262.83905" - gradientTransform="matrix(0.7236207,-0.7167103,1.004637,1.0143218,-131.254,253.93955)" - gradientUnits="userSpaceOnUse" - id="radialGradient24632" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="308.51169" - x2="309.02371" - y1="310.77368" - x1="311.3967" - gradientTransform="matrix(0.9897912,0,0,0.9897912,2.2765631,2.9503441)" - gradientUnits="userSpaceOnUse" - id="linearGradient24797" - xlink:href="#linearGradient31456" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="308.21875" - x2="307.5" - y1="311.88205" - x1="311.37668" - id="linearGradient24820" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="78.473343" - fx="207.04807" - cy="78.473343" - cx="207.04807" - gradientTransform="matrix(0.4011721,0.3766097,-0.7099042,0.7562044,179.21454,-58.566632)" - gradientUnits="userSpaceOnUse" - id="radialGradient43962" - xlink:href="#linearGradient20036" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="78.443413" - fx="206.39249" - cy="78.443413" - cx="206.39249" - gradientTransform="matrix(0.4543499,0.4687811,-0.6244606,0.6052369,161.562,-65.729731)" - gradientUnits="userSpaceOnUse" - id="radialGradient43964" - xlink:href="#linearGradient20036" - inkscape:collect="always" /> - <linearGradient - y2="303.10999" - x2="269.3085" - y1="279.72827" - x1="248.69196" - gradientTransform="translate(-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient62436" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="282.28745" - x2="250.22783" - y1="320.55179" - x1="289.61554" - gradientTransform="matrix(0,1,1,0,-33.03632,32.03632)" - gradientUnits="userSpaceOnUse" - id="linearGradient62558" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="300.96124" - x2="327.92044" - y1="283.61511" - x1="354.50601" - gradientTransform="rotate(-90,348.5,289.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient62560" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="translate(-1,21)" - gradientUnits="userSpaceOnUse" - id="linearGradient25381" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="rotate(90,339,299)" - gradientUnits="userSpaceOnUse" - id="linearGradient25383" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="rotate(180,349.5,299.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient25385" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="rotate(-90,360,300)" - gradientUnits="userSpaceOnUse" - id="linearGradient25387" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.01321" - y1="288.5" - x1="342" - gradientTransform="translate(-1,21)" - gradientUnits="userSpaceOnUse" - id="linearGradient25573" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="rotate(90,339,299)" - gradientUnits="userSpaceOnUse" - id="linearGradient25575" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="rotate(180,349.5,299.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient25577" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="344.5" - y1="288.5" - x1="342" - gradientTransform="rotate(-90,360,300)" - gradientUnits="userSpaceOnUse" - id="linearGradient25579" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="30.023426" - x2="278.25537" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,513.5,328.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient25872" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(670,111)" - gradientUnits="userSpaceOnUse" - id="linearGradient25874" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="26.600887" - x2="275.10107" - y1="-2.6686089" - x1="243.92192" - gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient25886" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(830,-47)" - gradientUnits="userSpaceOnUse" - id="linearGradient25888" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="53.875874" - x2="11.472005" - y1="57.827747" - x1="13.5" - gradientUnits="userSpaceOnUse" - id="linearGradient25890" - xlink:href="#linearGradient13998" - inkscape:collect="always" /> - <linearGradient - y2="487.60382" - x2="-26.642899" - y1="501.96539" - x1="-18.600719" - gradientUnits="userSpaceOnUse" - id="linearGradient25892" - xlink:href="#linearGradient13998" - inkscape:collect="always" /> - <linearGradient - y2="57.750687" - x2="13.5" - y1="60.637787" - x1="15.027407" - gradientUnits="userSpaceOnUse" - id="linearGradient25894" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="-22.25" - y1="490.70178" - x1="-32.067383" - gradientTransform="translate(0.03018343,0.1408617)" - gradientUnits="userSpaceOnUse" - id="linearGradient25897" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="299.83005" - x1="753.39417" - gradientTransform="translate(0,-72.000001)" - gradientUnits="userSpaceOnUse" - id="linearGradient25899" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="250.69945" - x2="114.66669" - y1="283.00519" - x1="121.79003" - gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)" - gradientUnits="userSpaceOnUse" - id="linearGradient25927" - xlink:href="#linearGradient24679" - inkscape:collect="always" /> - <linearGradient - y2="253.00755" - x2="235" - y1="283.94504" - x1="243.25" - gradientTransform="translate(-149,133.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient25929" - xlink:href="#linearGradient24671" - inkscape:collect="always" /> - <linearGradient - y2="179.12285" - x2="425" - y1="179.12074" - x1="426.12415" - gradientTransform="translate(-335,238.99245)" - gradientUnits="userSpaceOnUse" - id="linearGradient25931" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="30.023426" - x2="278.25537" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient25957" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(830,-47)" - gradientUnits="userSpaceOnUse" - id="linearGradient25959" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="299.83005" - x1="753.39417" - gradientTransform="translate(-136,-112)" - gradientUnits="userSpaceOnUse" - id="linearGradient25961" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="30.023426" - x2="278.25537" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient25982" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(830,-47)" - gradientUnits="userSpaceOnUse" - id="linearGradient25984" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="299.83005" - x1="753.39417" - gradientTransform="translate(-136,-88.000005)" - gradientUnits="userSpaceOnUse" - id="linearGradient25986" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="30.023426" - x2="278.25537" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient26011" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(830,-47)" - gradientUnits="userSpaceOnUse" - id="linearGradient26013" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="299.83005" - x1="753.39417" - gradientTransform="translate(-112,-76.000004)" - gradientUnits="userSpaceOnUse" - id="linearGradient26015" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="250.99995" - x2="33.682159" - y1="204.24995" - x1="-7.445384" - gradientTransform="matrix(0.923955,0,0,1,82.8792,399.00004)" - gradientUnits="userSpaceOnUse" - id="linearGradient26077" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="168.00002" - x2="36.972481" - y1="164" - x1="29.972469" - gradientTransform="translate(80.02752,483.00004)" - gradientUnits="userSpaceOnUse" - id="linearGradient26079" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="644" - x2="111" - y1="646" - x1="113" - gradientTransform="translate(-224,-1290)" - gradientUnits="userSpaceOnUse" - id="linearGradient26081" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="644.5" - x2="111.5" - y1="646" - x1="113" - gradientUnits="userSpaceOnUse" - id="linearGradient26083" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.05081" - x2="76.956871" - y1="239.83469" - x1="71.762154" - gradientTransform="matrix(0.831045,0,0,0.776773,36.146465,141.05131)" - gradientUnits="userSpaceOnUse" - id="linearGradient26126" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="246.81651" - x2="73.234337" - y1="243.03008" - x1="72.340698" - gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)" - gradientUnits="userSpaceOnUse" - id="linearGradient26128" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="247.29691" - x2="69.285805" - y1="239.95235" - x1="68.383354" - gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)" - gradientUnits="userSpaceOnUse" - id="linearGradient26130" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="25.190212" - fx="450.06522" - cy="25.190212" - cx="450.06522" - gradientTransform="matrix(0.39459,-0.991726,0.917787,0.36517,234.80511,750.0215)" - gradientUnits="userSpaceOnUse" - id="radialGradient27973" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="19.250505" - fx="450.72842" - cy="19.250505" - cx="450.72842" - gradientTransform="matrix(0.121304,-0.696283,0.871429,0.151818,359.51331,621.7)" - gradientUnits="userSpaceOnUse" - id="radialGradient27975" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="13.21724" - x2="441.9628" - y1="15.545153" - x1="456.81198" - gradientTransform="matrix(-1,0,0,1,883.51417,295)" - gradientUnits="userSpaceOnUse" - id="linearGradient27977" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="135.18265" - x2="64.109718" - y1="133.73566" - x1="62.793919" - gradientUnits="userSpaceOnUse" - id="linearGradient28099" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(-19,294.91429)" - y2="14.936845" - x2="432.875" - y1="16.23234" - x1="461.66425" - gradientUnits="userSpaceOnUse" - id="linearGradient28107" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="14.936845" - x2="432.875" - y1="16.23234" - x1="461.66425" - gradientTransform="translate(-19,294.91429)" - gradientUnits="userSpaceOnUse" - id="linearGradient27448" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="135.18265" - x2="64.109718" - y1="133.73566" - x1="62.793919" - gradientUnits="userSpaceOnUse" - id="linearGradient27450" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="25.190212" - fx="450.06522" - cy="25.190212" - cx="450.06522" - gradientTransform="matrix(0.39459,-0.991726,0.917787,0.36517,234.80511,750.0215)" - gradientUnits="userSpaceOnUse" - id="radialGradient27452" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="19.250505" - fx="450.72842" - cy="19.250505" - cx="450.72842" - gradientTransform="matrix(0.121304,-0.696283,0.871429,0.151818,359.51331,621.7)" - gradientUnits="userSpaceOnUse" - id="radialGradient27454" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="13.21724" - x2="441.9628" - y1="15.545153" - x1="456.81198" - gradientTransform="matrix(-1,0,0,1,883.51417,295)" - gradientUnits="userSpaceOnUse" - id="linearGradient27456" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="31.22842" - x2="326.41843" - y1="38.166924" - x1="332.49747" - gradientUnits="userSpaceOnUse" - id="linearGradient27540" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="41.875" - x2="337.3125" - y1="31.446384" - x1="326.483" - gradientTransform="translate(2.011921e-5,12.000013)" - gradientUnits="userSpaceOnUse" - id="linearGradient27542" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="36.739578" - x2="331.44778" - y1="34.005215" - x1="329.18762" - gradientUnits="userSpaceOnUse" - id="linearGradient27544" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.15624" - x2="34.095703" - y1="100.99999" - x1="29.4034" - gradientTransform="translate(220,-20.00667)" - gradientUnits="userSpaceOnUse" - id="linearGradient27598" - xlink:href="#linearGradient23705" - inkscape:collect="always" /> - <linearGradient - y2="104.89799" - x2="34.125" - y1="88.642494" - x1="20.125" - gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)" - gradientUnits="userSpaceOnUse" - id="linearGradient27600" - xlink:href="#linearGradient24168" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="74.083908" - fx="261.98364" - cy="74.083908" - cx="261.98364" - gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)" - gradientUnits="userSpaceOnUse" - id="radialGradient27602" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.14744" - x2="35.166668" - y1="90.504448" - x1="27.166666" - gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)" - gradientUnits="userSpaceOnUse" - id="linearGradient27604" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.20956" - fx="75.53241" - cy="500.20956" - cx="75.53241" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient27606" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="332.10181" - fx="135.14931" - cy="332.10181" - cx="135.14931" - gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)" - gradientUnits="userSpaceOnUse" - id="radialGradient27608" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="95.252274" - x2="250.5" - y1="90.253998" - x1="250.5" - gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)" - gradientUnits="userSpaceOnUse" - id="linearGradient27610" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="333.05716" - fx="140.33667" - cy="333.05716" - cx="140.33667" - gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)" - gradientUnits="userSpaceOnUse" - id="radialGradient27612" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="81.245804" - x2="258.00165" - y1="68.519989" - x1="270.60007" - gradientUnits="userSpaceOnUse" - id="linearGradient30389" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.415245" - x2="262.88068" - y1="80.395966" - x1="256.67459" - gradientUnits="userSpaceOnUse" - id="linearGradient30391" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.779551" - fy="79.598709" - fx="257.35309" - cy="79.598709" - cx="257.35309" - gradientTransform="matrix(0.4829018,0,0,0.4829018,133.47136,40.782399)" - gradientUnits="userSpaceOnUse" - id="radialGradient30393" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient30395" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient30397" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - y2="340" - x2="343.26239" - y1="323" - x1="308" - gradientTransform="translate(422.99996,88.99998)" - gradientUnits="userSpaceOnUse" - id="linearGradient29127" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="418.33594" - x2="753.40625" - y1="412.8125" - x1="732.9375" - gradientUnits="userSpaceOnUse" - id="linearGradient29129" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="122.36016" - x2="134.91479" - y1="111.2683" - x1="125.99933" - gradientUnits="userSpaceOnUse" - id="linearGradient27767" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="122.36016" - x2="134.91479" - y1="112.53999" - x1="126.72586" - gradientUnits="userSpaceOnUse" - id="linearGradient27769" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="99.029617" - x2="99.628899" - y1="114.71685" - x1="112.18942" - gradientTransform="translate(19.367382)" - gradientUnits="userSpaceOnUse" - id="linearGradient27771" - xlink:href="#linearGradient13973" - inkscape:collect="always" /> - <linearGradient - y2="131.03783" - x2="143.69765" - y1="114.2303" - x1="127.63637" - gradientUnits="userSpaceOnUse" - id="linearGradient27773" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="7" - fy="58" - fx="202" - cy="58" - cx="202" - gradientTransform="matrix(0.986122,0,0,0.986122,2.8033684,0.804927)" - gradientUnits="userSpaceOnUse" - id="radialGradient31865" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(258,-96.99999)" - y2="429.5" - x2="-119.5" - y1="431.5" - x1="-117.5" - gradientUnits="userSpaceOnUse" - id="linearGradient32298" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="1.5" - fy="14.5" - fx="70.5" - cy="14.5" - cx="70.5" - gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)" - gradientUnits="userSpaceOnUse" - id="radialGradient32241" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <radialGradient - r="5.5192375" - fy="14.649424" - fx="70.470596" - cy="14.649424" - cx="70.470596" - gradientTransform="matrix(0.5399935,0.3131662,-0.3907892,0.5793905,38.141764,-16.056748)" - gradientUnits="userSpaceOnUse" - id="radialGradient32243" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <radialGradient - r="2.333364" - fy="690.68732" - fx="975.50568" - cy="690.68732" - cx="975.50568" - gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)" - gradientUnits="userSpaceOnUse" - id="radialGradient53119" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="168.04703" - x2="105.85706" - y1="171.25618" - x1="108.71671" - gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)" - gradientUnits="userSpaceOnUse" - id="linearGradient53121" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="175.87964" - x2="-28.432825" - y1="178.07901" - x1="-26.313976" - gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)" - gradientUnits="userSpaceOnUse" - id="linearGradient53123" - xlink:href="#linearGradient20756" - inkscape:collect="always" /> - <linearGradient - y2="-17.546936" - x2="505.9494" - y1="-20.435461" - x1="510.29913" - gradientUnits="userSpaceOnUse" - id="linearGradient53125" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="297.92099" - x2="353.72073" - y1="314.11398" - x1="352.98236" - gradientTransform="rotate(-45,343.872,632.75601)" - gradientUnits="userSpaceOnUse" - id="linearGradient53127" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="-150.41035" - x2="373.83752" - y1="-159.88834" - x1="362.79037" - gradientTransform="translate(-15.983875,338)" - gradientUnits="userSpaceOnUse" - id="linearGradient53129" - xlink:href="#linearGradient13938" - inkscape:collect="always" /> - <linearGradient - y2="183.3365" - x2="350.97491" - y1="175.19124" - x1="343.51892" - gradientTransform="matrix(0.9900316,0,0,1,2.450297,0.00704954)" - gradientUnits="userSpaceOnUse" - id="linearGradient53131" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2.333364" - fy="690.68732" - fx="975.50568" - cy="690.68732" - cx="975.50568" - gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)" - gradientUnits="userSpaceOnUse" - id="radialGradient53133" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="168.04703" - x2="105.85706" - y1="171.25618" - x1="108.71671" - gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)" - gradientUnits="userSpaceOnUse" - id="linearGradient53135" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="175.87964" - x2="-28.432825" - y1="178.07901" - x1="-26.313976" - gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)" - gradientUnits="userSpaceOnUse" - id="linearGradient53137" - xlink:href="#linearGradient20756" - inkscape:collect="always" /> - <linearGradient - y2="-17.546936" - x2="505.9494" - y1="-20.435461" - x1="510.29913" - gradientUnits="userSpaceOnUse" - id="linearGradient53139" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2.333364" - fy="690.68732" - fx="975.50568" - cy="690.68732" - cx="975.50568" - gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)" - gradientUnits="userSpaceOnUse" - id="radialGradient53141" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="168.04703" - x2="105.85706" - y1="171.25618" - x1="108.71671" - gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)" - gradientUnits="userSpaceOnUse" - id="linearGradient53143" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="175.87964" - x2="-28.432825" - y1="178.07901" - x1="-26.313976" - gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)" - gradientUnits="userSpaceOnUse" - id="linearGradient53145" - xlink:href="#linearGradient20756" - inkscape:collect="always" /> - <linearGradient - y2="-17.546936" - x2="505.9494" - y1="-20.435461" - x1="510.29913" - gradientUnits="userSpaceOnUse" - id="linearGradient53147" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.15624" - x2="34.095703" - y1="100.99999" - x1="29.4034" - gradientTransform="translate(220,-20.00667)" - gradientUnits="userSpaceOnUse" - id="linearGradient53149" - xlink:href="#linearGradient42459" - inkscape:collect="always" /> - <linearGradient - y2="104.89799" - x2="34.125" - y1="88.642494" - x1="20.125" - gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)" - gradientUnits="userSpaceOnUse" - id="linearGradient53151" - xlink:href="#linearGradient22562" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="74.083908" - fx="261.98364" - cy="74.083908" - cx="261.98364" - gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)" - gradientUnits="userSpaceOnUse" - id="radialGradient53153" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="101.14744" - x2="35.166668" - y1="90.504448" - x1="27.166666" - gradientTransform="matrix(0.75,0,0,0.7516675,115.625,254.97076)" - gradientUnits="userSpaceOnUse" - id="linearGradient53155" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.20956" - fx="75.53241" - cy="500.20956" - cx="75.53241" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient53157" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="332.10181" - fx="135.14931" - cy="332.10181" - cx="135.14931" - gradientTransform="matrix(2.1055676,0.08927896,-0.05295416,1.2488779,-134.03789,-95.726825)" - gradientUnits="userSpaceOnUse" - id="radialGradient53159" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="95.252274" - x2="250.5" - y1="90.253998" - x1="250.5" - gradientTransform="translate(-112,237.00668)" - gradientUnits="userSpaceOnUse" - id="linearGradient53161" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="333.05716" - fx="140.33667" - cy="333.05716" - cx="140.33667" - gradientTransform="matrix(2.1055676,0.08927896,-0.05295416,1.2488779,-134.03789,-95.726825)" - gradientUnits="userSpaceOnUse" - id="radialGradient53163" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2.333364" - fy="690.68732" - fx="975.50568" - cy="690.68732" - cx="975.50568" - gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)" - gradientUnits="userSpaceOnUse" - id="radialGradient53165" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="168.04703" - x2="105.85706" - y1="171.25618" - x1="108.71671" - gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)" - gradientUnits="userSpaceOnUse" - id="linearGradient53167" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="175.87964" - x2="-28.432825" - y1="178.07901" - x1="-26.313976" - gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)" - gradientUnits="userSpaceOnUse" - id="linearGradient53169" - xlink:href="#linearGradient20756" - inkscape:collect="always" /> - <linearGradient - y2="-17.546936" - x2="505.9494" - y1="-20.435461" - x1="510.29913" - gradientUnits="userSpaceOnUse" - id="linearGradient53171" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="448" - x2="-14.000002" - y1="448" - x1="-22.902081" - gradientTransform="translate(2e-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient50870" - xlink:href="#linearGradient23178" - inkscape:collect="always" /> - <linearGradient - y2="121.25749" - x2="136.04924" - y1="111.98244" - x1="124.40742" - gradientUnits="userSpaceOnUse" - id="linearGradient33427" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="117.26753" - x1="132" - gradientUnits="userSpaceOnUse" - id="linearGradient33429" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="90.071045" - x2="452.63602" - y1="89.363937" - x1="458.99997" - gradientTransform="rotate(-45,414.39357,369.69801)" - gradientUnits="userSpaceOnUse" - id="linearGradient33585" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="108" - x2="142.00002" - y1="116" - x1="134.00002" - gradientUnits="userSpaceOnUse" - id="linearGradient33831" - xlink:href="#linearGradient31356" - inkscape:collect="always" /> - <linearGradient - y2="120.16792" - x2="132.97911" - y1="112.24533" - x1="124.75568" - gradientUnits="userSpaceOnUse" - id="linearGradient33833" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="117.26753" - x1="132" - gradientUnits="userSpaceOnUse" - id="linearGradient33835" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="29.392145" - x2="277.86761" - y1="2.1803131" - x1="254.19829" - gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)" - gradientUnits="userSpaceOnUse" - id="linearGradient37472" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="239.125" - x1="85.1875" - gradientTransform="translate(124,-102.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient37475" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="26.679274" - x2="275.62497" - y1="11.593864" - x1="261.83936" - gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)" - gradientUnits="userSpaceOnUse" - id="linearGradient37477" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="239.125" - x1="85.1875" - gradientTransform="translate(124,-102.00001)" - gradientUnits="userSpaceOnUse" - id="linearGradient37479" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="81.245804" - x2="258.00165" - y1="68.519989" - x1="270.60007" - gradientUnits="userSpaceOnUse" - id="linearGradient37481" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.415245" - x2="262.88068" - y1="80.395966" - x1="256.67459" - gradientUnits="userSpaceOnUse" - id="linearGradient37483" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.779551" - fy="79.598709" - fx="257.35309" - cy="79.598709" - cx="257.35309" - gradientTransform="matrix(0.4829018,0,0,0.4829018,133.47136,40.782399)" - gradientUnits="userSpaceOnUse" - id="radialGradient37485" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37487" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37489" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="78.512764" - fx="258.47122" - cy="78.512764" - cx="258.47122" - gradientTransform="matrix(-1.5793179,0,-1.0159927e-7,-1.6412688,666.67947,207.37331)" - gradientUnits="userSpaceOnUse" - id="radialGradient37491" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="81.382545" - x2="257.38638" - y1="68.113258" - x1="270.66064" - gradientUnits="userSpaceOnUse" - id="linearGradient37493" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.562462" - x2="262.43726" - y1="80.515495" - x1="256.38586" - gradientUnits="userSpaceOnUse" - id="linearGradient37495" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37497" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37499" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="8" - fy="117.97826" - fx="135.83771" - cy="117.97826" - cx="135.83771" - gradientTransform="matrix(-0.08933014,-0.7764284,0.7350832,-0.08334857,57.410559,233.30156)" - gradientUnits="userSpaceOnUse" - id="radialGradient37501" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="137.6748" - x2="148.06364" - y1="105.94044" - x1="121.19734" - gradientUnits="userSpaceOnUse" - id="linearGradient37503" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="81.382545" - x2="257.38638" - y1="68.113258" - x1="270.66064" - gradientUnits="userSpaceOnUse" - id="linearGradient37505" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.562462" - x2="262.43726" - y1="80.515495" - x1="256.38586" - gradientUnits="userSpaceOnUse" - id="linearGradient37507" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37509" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37511" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="78.512764" - fx="258.47122" - cy="78.512764" - cx="258.47122" - gradientTransform="matrix(-1.3336259,0,-8.5793649e-8,-1.3859393,603.17514,187.32668)" - gradientUnits="userSpaceOnUse" - id="radialGradient37513" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="78.512764" - fx="258.47122" - cy="78.512764" - cx="258.47122" - gradientTransform="matrix(-1.3648614,0,-8.7803051e-8,-1.4184,611.24862,189.87526)" - gradientUnits="userSpaceOnUse" - id="radialGradient37515" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="81.382545" - x2="257.38638" - y1="68.113258" - x1="270.66064" - gradientUnits="userSpaceOnUse" - id="linearGradient37517" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.562462" - x2="262.43726" - y1="80.515495" - x1="256.38586" - gradientUnits="userSpaceOnUse" - id="linearGradient37519" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37521" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37523" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - y2="35.276588" - x2="330.27045" - y1="43.328976" - x1="337.34329" - gradientUnits="userSpaceOnUse" - id="linearGradient37525" - xlink:href="#linearGradient30124" - inkscape:collect="always" /> - <linearGradient - y2="41.570362" - x2="335.27429" - y1="35.5" - x1="329.9158" - gradientUnits="userSpaceOnUse" - id="linearGradient37527" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="38.642647" - x2="193.26451" - y1="9.0567484" - x1="166.89752" - gradientTransform="matrix(1.0028571,0,0,0.9943503,-0.4404318,0.129119)" - gradientUnits="userSpaceOnUse" - id="linearGradient37529" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="116.99384" - x2="133.77768" - y1="122.8346" - x1="127.93343" - gradientUnits="userSpaceOnUse" - id="linearGradient37531" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="118.66972" - x2="132" - y1="108.39205" - x1="141.60255" - gradientUnits="userSpaceOnUse" - id="linearGradient37533" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="116.99384" - x2="133.77768" - y1="127.14286" - x1="122.86111" - gradientUnits="userSpaceOnUse" - id="linearGradient37535" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="118.66972" - x2="132" - y1="108.39205" - x1="141.60255" - gradientUnits="userSpaceOnUse" - id="linearGradient37537" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="659" - x2="285" - y1="659" - x1="266" - gradientUnits="userSpaceOnUse" - id="linearGradient37539" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="602.96759" - x2="244.21062" - y1="600.74884" - x1="244.21062" - gradientUnits="userSpaceOnUse" - id="linearGradient37541" - xlink:href="#linearGradient35391" - inkscape:collect="always" /> - <linearGradient - y2="604.52502" - x2="245.93307" - y1="588.43396" - x1="235.29379" - gradientUnits="userSpaceOnUse" - id="linearGradient37543" - xlink:href="#linearGradient35407" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,992,0)" - y2="36" - x2="494" - y1="36" - x1="510.25" - gradientUnits="userSpaceOnUse" - id="linearGradient37545" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,992,0)" - y2="43" - x2="503" - y1="33" - x1="492" - gradientUnits="userSpaceOnUse" - id="linearGradient37547" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="35" - x2="483" - y1="35" - x1="497.3125" - gradientTransform="matrix(-1,0,0,1,551,105)" - gradientUnits="userSpaceOnUse" - id="linearGradient37549" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="35" - x2="483" - y1="35" - x1="497.3125" - gradientTransform="matrix(-1,0,0,1,551,105)" - gradientUnits="userSpaceOnUse" - id="linearGradient37551" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="12" - x2="68" - y1="32" - x1="86.248604" - gradientUnits="userSpaceOnUse" - id="linearGradient37553" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="9.0000019" - x2="64.5" - y1="27" - x1="81" - gradientTransform="translate(0,1)" - gradientUnits="userSpaceOnUse" - id="linearGradient37555" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="24.480759" - x2="79.465332" - y1="15.659542" - x1="70.78582" - gradientUnits="userSpaceOnUse" - id="linearGradient37557" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <radialGradient - r="6.5" - fy="14.60904" - fx="63.013588" - cy="14.60904" - cx="63.013588" - gradientTransform="matrix(0.5997527,0.4726093,-0.6665451,0.8458611,35.480681,-28.765852)" - gradientUnits="userSpaceOnUse" - id="radialGradient37559" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="54.8125" - y1="500" - x1="108" - gradientTransform="matrix(0.8666667,0,0,0.9166667,406.13333,-443.79167)" - gradientUnits="userSpaceOnUse" - id="linearGradient37571" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="501.10059" - x2="41.311054" - y1="502.54196" - x1="83.261826" - gradientTransform="matrix(1,0,0,0.9971589,396,-484.56523)" - gradientUnits="userSpaceOnUse" - id="linearGradient37573" - xlink:href="#linearGradient15809" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="492.15359" - fx="75.95578" - cy="492.15359" - cx="75.95578" - gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,321.60762,256.85923)" - gradientUnits="userSpaceOnUse" - id="radialGradient37575" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <linearGradient - y2="501.58331" - x2="76.885078" - y1="504.67188" - x1="80.768944" - gradientUnits="userSpaceOnUse" - id="linearGradient37578" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="501.04794" - x2="78.000008" - y1="511.42972" - x1="89.526657" - gradientUnits="userSpaceOnUse" - id="linearGradient37580" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2.9089756" - fy="503.81497" - fx="79.959885" - cy="503.81497" - cx="79.959885" - gradientTransform="matrix(2.2665671,0.04035316,-0.03648524,1.99062,-82.893589,-502.25433)" - gradientUnits="userSpaceOnUse" - id="radialGradient37582" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37584" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient37586" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - y2="330.89999" - x2="264.89999" - y1="330.10001" - x1="264.10001" - gradientUnits="userSpaceOnUse" - id="linearGradient37588" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="121.20407" - x2="133.88583" - y1="108.82882" - x1="122.38876" - gradientUnits="userSpaceOnUse" - id="linearGradient37590" - xlink:href="#linearGradient14232" - inkscape:collect="always" /> - <linearGradient - y2="103.57072" - x2="44.999863" - y1="96.955269" - x1="51.37524" - gradientTransform="matrix(0.9995363,0,0,-1.0036971,220.01067,167.35026)" - gradientUnits="userSpaceOnUse" - id="linearGradient37592" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="117.24104" - x2="131.3092" - y1="124.67203" - x1="137.88235" - gradientUnits="userSpaceOnUse" - id="linearGradient37594" - xlink:href="#linearGradient15437" - inkscape:collect="always" /> - <linearGradient - y2="126.57021" - x2="139.86742" - y1="110.87843" - x1="126.37032" - gradientUnits="userSpaceOnUse" - id="linearGradient37596" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="2.333364" - fy="690.68732" - fx="975.50568" - cy="690.68732" - cx="975.50568" - gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)" - gradientUnits="userSpaceOnUse" - id="radialGradient37608" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="168.04703" - x2="105.85706" - y1="171.25618" - x1="108.71671" - gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)" - gradientUnits="userSpaceOnUse" - id="linearGradient37610" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="175.87964" - x2="-28.432825" - y1="178.07901" - x1="-26.313976" - gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)" - gradientUnits="userSpaceOnUse" - id="linearGradient37612" - xlink:href="#linearGradient20756" - inkscape:collect="always" /> - <linearGradient - y2="-17.546936" - x2="505.9494" - y1="-20.435461" - x1="510.29913" - gradientUnits="userSpaceOnUse" - id="linearGradient37614" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="123.61623" - x2="332.88193" - y1="126.23978" - x1="387.30396" - gradientTransform="rotate(-45,396.37194,506.00979)" - gradientUnits="userSpaceOnUse" - id="linearGradient37636" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="297.92099" - x2="353.72073" - y1="314.11398" - x1="352.98236" - gradientTransform="rotate(-45,343.872,632.75601)" - gradientUnits="userSpaceOnUse" - id="linearGradient37638" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="137.6748" - x2="148.06364" - y1="105.94044" - x1="121.19734" - gradientUnits="userSpaceOnUse" - id="linearGradient37640" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="103.11092" - x2="135.45256" - y1="75.666725" - x1="109.04134" - gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)" - gradientUnits="userSpaceOnUse" - id="linearGradient42322" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="93.805557" - x1="47.655102" - gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.6508478,-9.2334126)" - gradientUnits="userSpaceOnUse" - id="linearGradient42324" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="117.77643" - x2="133.97179" - y1="110.75571" - x1="124.8772" - gradientUnits="userSpaceOnUse" - id="linearGradient42326" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="217.06438" - x2="123.33967" - y1="223.61363" - x1="129.32576" - gradientUnits="userSpaceOnUse" - id="linearGradient42328" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="129.05313" - x2="142.64723" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42330" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.63284" - x2="-45.689278" - y1="252.69086" - x1="-4.9152389" - gradientTransform="matrix(-1.0041772,0,0,0.9688607,-81.584854,117.13687)" - gradientUnits="userSpaceOnUse" - id="linearGradient42332" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="60.125" - x2="117" - y1="53.875" - x1="107.96875" - gradientTransform="matrix(0.9993234,0,0,1.0050357,-171.92846,305.72314)" - gradientUnits="userSpaceOnUse" - id="linearGradient42334" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-22.846634" - x2="134.08138" - y1="-11.628862" - x1="154.24324" - gradientUnits="userSpaceOnUse" - id="linearGradient42336" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-21" - x2="135.25" - y1="-18" - x1="137.5" - gradientUnits="userSpaceOnUse" - id="linearGradient42338" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-23.945318" - x2="132.29695" - y1="-21.522242" - x1="134.12642" - gradientUnits="userSpaceOnUse" - id="linearGradient42340" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-24.343456" - x2="131.69801" - y1="-21.3074" - x1="134.6615" - gradientUnits="userSpaceOnUse" - id="linearGradient42342" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="28.695114" - x2="-76.564636" - y1="31.914484" - x1="-69.457596" - gradientUnits="userSpaceOnUse" - id="linearGradient42344" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="31" - x2="-78.812721" - y1="48.005856" - x1="-57.780041" - gradientUnits="userSpaceOnUse" - id="linearGradient42346" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="103.11092" - x2="135.45256" - y1="75.666725" - x1="109.04134" - gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)" - gradientUnits="userSpaceOnUse" - id="linearGradient42348" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="97.491707" - x1="51.497997" - gradientTransform="matrix(0.3000195,0,0,0.2998291,32.548709,64.760571)" - gradientUnits="userSpaceOnUse" - id="linearGradient42350" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="94.987144" - x1="51.497997" - gradientTransform="matrix(0.3000195,0,0,0.1998289,32.548709,79.011866)" - gradientUnits="userSpaceOnUse" - id="linearGradient42352" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="94.987129" - x1="51.497997" - gradientTransform="matrix(0.3000195,0,0,0.1998289,32.548709,83.013491)" - gradientUnits="userSpaceOnUse" - id="linearGradient42354" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="94.987114" - x1="48.998543" - gradientTransform="matrix(0.2,0,0,0.1998289,42.197983,83.013493)" - gradientUnits="userSpaceOnUse" - id="linearGradient42356" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="94.995667" - x1="48.99855" - gradientTransform="matrix(0.2,0,0,0.1998289,42.197981,79.010163)" - gradientUnits="userSpaceOnUse" - id="linearGradient42358" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="97.494553" - x1="48.998554" - gradientTransform="matrix(0.2,0,0,0.2999998,42.19798,64.743076)" - gradientUnits="userSpaceOnUse" - id="linearGradient42360" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="94.987114" - x1="48.998539" - gradientTransform="matrix(0.2,0,0,0.1998289,46.196563,83.013493)" - gradientUnits="userSpaceOnUse" - id="linearGradient42362" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="94.995667" - x1="48.998547" - gradientTransform="matrix(0.2,0,0,0.1998289,46.196561,79.010163)" - gradientUnits="userSpaceOnUse" - id="linearGradient42364" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="97.494553" - x1="48.998554" - gradientTransform="matrix(0.2,0,0,0.2999998,46.19656,64.743076)" - gradientUnits="userSpaceOnUse" - id="linearGradient42366" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="38.387074" - x2="-121.73741" - y1="52.625" - x1="-109.125" - gradientUnits="userSpaceOnUse" - id="linearGradient42368" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="123.20583" - x2="136.44698" - y1="99.873772" - x1="112.48699" - gradientUnits="userSpaceOnUse" - id="linearGradient42370" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42372" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="85.825607" - x1="102.83286" - gradientUnits="userSpaceOnUse" - id="linearGradient42374" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="65.5" - x2="-181.375" - y1="65.5" - x1="-170.25" - gradientTransform="translate(-41,98)" - gradientUnits="userSpaceOnUse" - id="linearGradient42376" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="39.110355" - x2="-202.33263" - y1="43.134327" - x1="-223.42456" - gradientTransform="matrix(0.6962506,0,0,0.8034158,-66.833415,127.95312)" - gradientUnits="userSpaceOnUse" - id="linearGradient42378" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="27.996962" - x2="-220.82353" - y1="40.355042" - x1="-219.98772" - gradientTransform="matrix(0.6962506,0,0,0.8034158,-66.833415,127.95312)" - gradientUnits="userSpaceOnUse" - id="linearGradient42380" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="62.441177" - x2="-170.82031" - y1="63.26775" - x1="-177.6924" - gradientTransform="matrix(0.9098462,0,0,0.9414558,-57.134785,102.33514)" - gradientUnits="userSpaceOnUse" - id="linearGradient42382" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-16.264704" - x2="-93.75" - y1="-16" - x1="-101" - gradientTransform="matrix(1.2857143,0,0,0.787037,-92.714287,177.80092)" - gradientUnits="userSpaceOnUse" - id="linearGradient42384" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="185.8125" - x2="-219.5" - y1="193.68091" - x1="-211.04486" - gradientUnits="userSpaceOnUse" - id="linearGradient42386" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="6.9375" - fy="188.13423" - fx="-216.5222" - cy="188.13423" - cx="-216.5222" - gradientTransform="matrix(2.6261963,-1.575549,0.4790575,0.7985147,261.90894,-304.15053)" - gradientUnits="userSpaceOnUse" - id="radialGradient42388" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <radialGradient - r="3.4576657" - fy="182.64247" - fx="-221.88463" - cy="182.64247" - cx="-221.88463" - gradientTransform="matrix(2.4767928,-0.2294888,0.06653313,0.7180687,315.70283,0.01290384)" - gradientUnits="userSpaceOnUse" - id="radialGradient42390" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="44.732624" - x2="-213" - y1="38.277779" - x1="-225.00002" - gradientUnits="userSpaceOnUse" - id="linearGradient42392" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="5.8999949" - fy="201.01204" - fx="-215.0979" - cy="201.01204" - cx="-215.0979" - gradientTransform="matrix(1.1226244,0.04761823,-0.1611956,3.8002759,59.188894,-553.59611)" - gradientUnits="userSpaceOnUse" - id="radialGradient42394" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="195.27762" - x2="-214.39445" - y1="201" - x1="-224" - gradientTransform="translate(0,4)" - gradientUnits="userSpaceOnUse" - id="linearGradient42396" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="277.00357" - x2="215.34009" - y1="290.00357" - x1="209.05762" - gradientTransform="matrix(1.1142111,0,0,-1,-174.01401,596.00357)" - gradientUnits="userSpaceOnUse" - id="linearGradient42398" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="559.03442" - x2="198.57239" - y1="550.50702" - x1="178.77469" - gradientTransform="matrix(1.1142111,0,0,-1,-174.01401,596.00357)" - gradientUnits="userSpaceOnUse" - id="linearGradient42400" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="78.9655" - x2="93.029579" - y1="120.4313" - x1="132" - gradientUnits="userSpaceOnUse" - id="linearGradient42402" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="123.20583" - x2="136.44698" - y1="99.873772" - x1="112.48699" - gradientUnits="userSpaceOnUse" - id="linearGradient42404" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42406" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="85.825607" - x1="102.83286" - gradientUnits="userSpaceOnUse" - id="linearGradient42408" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="78.9655" - x2="93.029579" - y1="120.4313" - x1="132" - gradientUnits="userSpaceOnUse" - id="linearGradient42410" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="559.03442" - x2="198.57239" - y1="550.50702" - x1="178.77469" - gradientTransform="matrix(1.1142111,0,0,-1,-174.01401,596.00357)" - gradientUnits="userSpaceOnUse" - id="linearGradient42412" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="120.49951" - x2="133.62697" - y1="99.873772" - x1="112.48699" - gradientUnits="userSpaceOnUse" - id="linearGradient42414" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42416" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="85.825607" - x1="102.83286" - gradientUnits="userSpaceOnUse" - id="linearGradient42418" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="65.5" - x2="-181.375" - y1="65.5" - x1="-170.25" - gradientTransform="translate(-120,79)" - gradientUnits="userSpaceOnUse" - id="linearGradient42420" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="39.110355" - x2="-202.33263" - y1="43.134327" - x1="-223.42456" - gradientTransform="matrix(0.6962506,0,0,0.8034158,-145.83341,108.95312)" - gradientUnits="userSpaceOnUse" - id="linearGradient42422" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="27.996962" - x2="-220.82353" - y1="40.355042" - x1="-219.98772" - gradientTransform="matrix(0.6962506,0,0,0.8034158,-145.83341,108.95312)" - gradientUnits="userSpaceOnUse" - id="linearGradient42424" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="62.441177" - x2="-170.82031" - y1="63.26775" - x1="-177.6924" - gradientTransform="matrix(0.9098462,0,0,0.9414558,-136.13478,83.33514)" - gradientUnits="userSpaceOnUse" - id="linearGradient42426" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-16.264704" - x2="-93.75" - y1="-16" - x1="-101" - gradientTransform="matrix(1.2857143,0,0,0.787037,-171.71429,158.80092)" - gradientUnits="userSpaceOnUse" - id="linearGradient42428" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="726.37006" - x2="1661.8125" - y1="720.01788" - x1="1664.4413" - gradientTransform="translate(-1297,-948)" - gradientUnits="userSpaceOnUse" - id="linearGradient42430" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="722.19189" - fx="1662.2664" - cy="722.19189" - cx="1662.2664" - gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1689.2674,-563.64056)" - gradientUnits="userSpaceOnUse" - id="radialGradient42432" - xlink:href="#linearGradient19425" - inkscape:collect="always" /> - <linearGradient - y2="829.72656" - x2="1977.4047" - y1="827.77124" - x1="1984.3658" - gradientTransform="matrix(0.8167109,0,0,0.8433415,-1256.7473,-918.72044)" - gradientUnits="userSpaceOnUse" - id="linearGradient42434" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="185.8125" - x2="-219.5" - y1="193.68091" - x1="-211.04486" - gradientUnits="userSpaceOnUse" - id="linearGradient42436" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="6.9375" - fy="188.13423" - fx="-216.5222" - cy="188.13423" - cx="-216.5222" - gradientTransform="matrix(2.6261963,-1.575549,0.4790575,0.7985147,261.90894,-304.15053)" - gradientUnits="userSpaceOnUse" - id="radialGradient42438" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <radialGradient - r="3.4576657" - fy="182.64247" - fx="-221.88463" - cy="182.64247" - cx="-221.88463" - gradientTransform="matrix(2.4767928,-0.2294888,0.06653313,0.7180687,315.70283,0.01290384)" - gradientUnits="userSpaceOnUse" - id="radialGradient42440" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="44.732624" - x2="-213" - y1="38.277779" - x1="-225.00002" - gradientUnits="userSpaceOnUse" - id="linearGradient42442" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="117.77643" - x2="133.97179" - y1="110.75571" - x1="124.8772" - gradientUnits="userSpaceOnUse" - id="linearGradient42444" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="129.05313" - x2="142.64723" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42446" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="217.06438" - x2="123.33967" - y1="223.61363" - x1="129.32576" - gradientTransform="matrix(1.1658027,0,0,1.1657997,-354.28972,51.94393)" - gradientUnits="userSpaceOnUse" - id="linearGradient42448" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42462" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="108.56933" - x1="123.26987" - gradientUnits="userSpaceOnUse" - id="linearGradient42464" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42466" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="252.63284" - x2="-45.689278" - y1="252.69086" - x1="-4.9152389" - gradientTransform="matrix(-0.8370074,0,0,0.8129865,84.784966,-149.92038)" - gradientUnits="userSpaceOnUse" - id="linearGradient42468" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="60.591385" - x2="117.16058" - y1="57.034107" - x1="111.03847" - gradientTransform="matrix(0.8167109,0,0,0.8433415,11.285548,8.325368)" - gradientUnits="userSpaceOnUse" - id="linearGradient42470" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42472" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="108.56933" - x1="123.26987" - gradientUnits="userSpaceOnUse" - id="linearGradient42474" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42477" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-17.998919" - x2="-100.62162" - y1="-18.005362" - x1="-92.587807" - gradientUnits="userSpaceOnUse" - id="linearGradient42479" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="-17" - x2="-93" - y1="-16" - x1="-101" - gradientUnits="userSpaceOnUse" - id="linearGradient42481" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-22.166544" - x2="-102.96513" - y1="-22.830606" - x1="-87.491188" - gradientUnits="userSpaceOnUse" - id="linearGradient42483" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-25.872688" - x2="-98.997849" - y1="-23.173643" - x1="-98.997849" - gradientUnits="userSpaceOnUse" - id="linearGradient42485" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42487" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="108.56933" - x1="123.26987" - gradientUnits="userSpaceOnUse" - id="linearGradient42489" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42491" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="103.11092" - x2="135.45256" - y1="75.666725" - x1="109.04134" - gradientTransform="matrix(0.5290924,0,0,0.5294132,-17.313533,46.110999)" - gradientUnits="userSpaceOnUse" - id="linearGradient42493" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="105.27895" - x2="59.057678" - y1="93.805557" - x1="47.655102" - gradientTransform="matrix(0.5350034,0,0,0.5349052,24.446207,45.843517)" - gradientUnits="userSpaceOnUse" - id="linearGradient42495" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42497" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="108.56933" - x1="123.26987" - gradientUnits="userSpaceOnUse" - id="linearGradient42499" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42501" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="117.77643" - x2="133.97179" - y1="110.75571" - x1="124.8772" - gradientUnits="userSpaceOnUse" - id="linearGradient42503" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="129.05313" - x2="142.64723" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42505" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42507" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="108.56933" - x1="123.26987" - gradientUnits="userSpaceOnUse" - id="linearGradient42509" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient42511" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="119.05286" - x2="135.14919" - y1="106.42961" - x1="118.95689" - gradientTransform="matrix(0.4749148,1.0023386,-1.2226848,-0.4749148,213.62384,41.735193)" - gradientUnits="userSpaceOnUse" - id="linearGradient42513" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="134.687" - x2="147.95374" - y1="116.31751" - x1="130.39502" - gradientTransform="matrix(0.5333554,1.1220467,-1.1447545,-0.5333554,196.63818,32.816067)" - gradientUnits="userSpaceOnUse" - id="linearGradient42515" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="223.69542" - x2="-171.01999" - y1="313.87549" - x1="-132.24858" - gradientUnits="userSpaceOnUse" - id="linearGradient42517" - xlink:href="#linearGradient18207" - inkscape:collect="always" /> - <linearGradient - y2="124.47867" - x2="137.5759" - y1="100.93772" - x1="114.15679" - gradientUnits="userSpaceOnUse" - id="linearGradient42519" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="125.82862" - x2="140.19273" - y1="118" - x1="131.12576" - gradientUnits="userSpaceOnUse" - id="linearGradient42521" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient42523" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="429.53806" - x2="322.08145" - y1="408.49368" - x1="299.70026" - gradientTransform="matrix(0.9050931,-7.9558708e-4,0.00612764,0.9147058,26.488451,35.562258)" - gradientUnits="userSpaceOnUse" - id="linearGradient42525" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient35406" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="100.51657" - x1="119.94563" - gradientUnits="userSpaceOnUse" - id="linearGradient35408" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="308.51169" - x2="308.84512" - y1="311.2269" - x1="311.90765" - gradientTransform="matrix(0.9897912,0,0,0.9897912,2.2765631,2.9503441)" - gradientUnits="userSpaceOnUse" - id="linearGradient35410" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <radialGradient - r="7.03125" - fy="237.2262" - fx="269.71231" - cy="237.2262" - cx="269.71231" - gradientTransform="matrix(1.1377775,-0.7111077,0.4395239,0.7032404,-101.13916,328.96745)" - gradientUnits="userSpaceOnUse" - id="radialGradient35412" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="7.03125" - fy="245.91792" - fx="262.83905" - cy="245.91792" - cx="262.83905" - gradientTransform="matrix(1.706663,-1.1377794,0.5688915,0.8533318,-282.47828,404.20327)" - gradientUnits="userSpaceOnUse" - id="radialGradient35414" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient35416" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="100.51657" - x1="119.94563" - gradientUnits="userSpaceOnUse" - id="linearGradient35418" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="286.2493" - x2="226.09999" - y1="291.80676" - x1="220.14905" - gradientUnits="userSpaceOnUse" - id="linearGradient35420" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="291.99768" - x2="219.06912" - y1="296.15784" - x1="223.12212" - gradientUnits="userSpaceOnUse" - id="linearGradient35422" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="297.01614" - x2="224.01613" - y1="290.56451" - x1="217.56451" - gradientUnits="userSpaceOnUse" - id="linearGradient35424" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="4" - fy="291.33972" - fx="219.00334" - cy="291.33972" - cx="219.00334" - gradientTransform="matrix(0.3677588,0.3783715,-0.5696226,0.5536455,304.13863,47.532824)" - gradientUnits="userSpaceOnUse" - id="radialGradient35426" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient35468" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="100.51657" - x1="119.94563" - gradientUnits="userSpaceOnUse" - id="linearGradient35470" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="308.51169" - x2="308.84512" - y1="311.2269" - x1="311.90765" - gradientTransform="matrix(0.9897912,0,0,0.9897912,2.2765631,2.9503441)" - gradientUnits="userSpaceOnUse" - id="linearGradient35472" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <radialGradient - r="7.03125" - fy="237.2262" - fx="269.71231" - cy="237.2262" - cx="269.71231" - gradientTransform="matrix(1.1377775,-0.7111077,0.4395239,0.7032404,-101.13916,328.96745)" - gradientUnits="userSpaceOnUse" - id="radialGradient35474" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="7.03125" - fy="245.91792" - fx="262.83905" - cy="245.91792" - cx="262.83905" - gradientTransform="matrix(1.706663,-1.1377794,0.5688915,0.8533318,-282.47828,404.20327)" - gradientUnits="userSpaceOnUse" - id="radialGradient35476" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.94853" - x2="140.66667" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient35478" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.59384" - x2="138.25778" - y1="100.51657" - x1="119.94563" - gradientUnits="userSpaceOnUse" - id="linearGradient35480" - xlink:href="#linearGradient15425" - inkscape:collect="always" /> - <linearGradient - y2="286.2493" - x2="226.09999" - y1="291.80676" - x1="220.14905" - gradientUnits="userSpaceOnUse" - id="linearGradient35482" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="291.99768" - x2="219.06912" - y1="296.15784" - x1="223.12212" - gradientUnits="userSpaceOnUse" - id="linearGradient35484" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="297.01614" - x2="224.01613" - y1="290.56451" - x1="217.56451" - gradientUnits="userSpaceOnUse" - id="linearGradient35486" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="4" - fy="291.33972" - fx="219.00334" - cy="291.33972" - cx="219.00334" - gradientTransform="matrix(0.3677588,0.3783715,-0.5696226,0.5536455,304.13863,47.532824)" - gradientUnits="userSpaceOnUse" - id="radialGradient35488" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="119.21729" - x2="133.11621" - y1="112.6446" - x1="125.59209" - gradientUnits="userSpaceOnUse" - id="linearGradient34618" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="132.30261" - x2="141.83322" - y1="116.31751" - x1="130.39502" - gradientUnits="userSpaceOnUse" - id="linearGradient34620" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="54.000004" - x2="34" - y1="60.000004" - x1="31" - gradientUnits="userSpaceOnUse" - id="linearGradient35446" - xlink:href="#linearGradient35411" - inkscape:collect="always" /> - <linearGradient - y2="101.14284" - x2="121.4286" - y1="118" - x1="135.46967" - gradientUnits="userSpaceOnUse" - id="linearGradient35448" - xlink:href="#linearGradient35411" - inkscape:collect="always" /> - <linearGradient - y2="114.8" - x2="128.8" - y1="118" - x1="133.60002" - gradientUnits="userSpaceOnUse" - id="linearGradient35450" - xlink:href="#linearGradient35411" - inkscape:collect="always" /> - <linearGradient - y2="114.8" - x2="128.8" - y1="123.05057" - x1="132.30316" - gradientUnits="userSpaceOnUse" - id="linearGradient35452" - xlink:href="#linearGradient35411" - inkscape:collect="always" /> - <linearGradient - y2="118" - x2="130.48389" - y1="124.27161" - x1="136.35806" - gradientUnits="userSpaceOnUse" - id="linearGradient35454" - xlink:href="#linearGradient35411" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="55.066181" - x2="32.5" - y1="65.791054" - x1="28.130203" - id="linearGradient35718" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="1.5" - fy="14.5" - fx="70.5" - cy="14.5" - cx="70.5" - gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)" - gradientUnits="userSpaceOnUse" - id="radialGradient36452" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="419.75" - x2="-101.49999" - y1="417.87503" - x1="-103.37495" - gradientTransform="matrix(0.4000084,0,0,0.4000084,137.60085,-8.4035259)" - gradientUnits="userSpaceOnUse" - id="linearGradient36454" - xlink:href="#linearGradient36273" - inkscape:collect="always" /> - <linearGradient - y2="419.75" - x2="-101.49999" - y1="417.87503" - x1="-103.37495" - gradientTransform="matrix(0.4000084,0,0,0.4000084,131.60084,3.5964741)" - gradientUnits="userSpaceOnUse" - id="linearGradient36456" - xlink:href="#linearGradient36273" - inkscape:collect="always" /> - <linearGradient - y2="419.75" - x2="-101.49999" - y1="417.87503" - x1="-103.37495" - gradientTransform="matrix(0.4000084,0,0,0.4000084,143.60084,3.5964739)" - gradientUnits="userSpaceOnUse" - id="linearGradient36458" - xlink:href="#linearGradient36273" - inkscape:collect="always" /> - <linearGradient - y2="129.27902" - x2="143.16118" - y1="111.40558" - x1="125.75312" - gradientUnits="userSpaceOnUse" - id="linearGradient37095" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="42.717522" - x2="197.03207" - y1="30.343155" - x1="185.89514" - gradientTransform="matrix(1.0028571,0,0,0.9943503,-0.4404318,0.129119)" - gradientUnits="userSpaceOnUse" - id="linearGradient37097" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="32.46875" - x2="180.8125" - y1="40.25" - x1="188" - gradientTransform="translate(-3,3)" - gradientUnits="userSpaceOnUse" - id="linearGradient36648" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="30.15625" - x2="184.25" - y1="33.9375" - x1="187.8125" - gradientTransform="translate(-3,3)" - gradientUnits="userSpaceOnUse" - id="linearGradient36650" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="43.381248" - x2="186.00626" - y1="33.537502" - x1="177.85001" - gradientTransform="translate(-3.0999952,2.9000005)" - gradientUnits="userSpaceOnUse" - id="linearGradient36652" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="31.368597" - x2="172.36885" - y1="39.645184" - x1="182.20605" - gradientTransform="matrix(0.9643891,0,0,0.9772371,6.188671,1.0072576)" - gradientUnits="userSpaceOnUse" - id="linearGradient36654" - xlink:href="#linearGradient19900" - inkscape:collect="always" /> - <linearGradient - y2="37.415516" - x2="186.00002" - y1="32.701904" - x1="181.14906" - gradientUnits="userSpaceOnUse" - id="linearGradient36656" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="34.272892" - x2="175.82253" - y1="40.924297" - x1="181.9404" - gradientTransform="matrix(0.9643891,0,0,0.9772371,9.438677,-2.4927424)" - gradientUnits="userSpaceOnUse" - id="linearGradient36658" - xlink:href="#linearGradient19900" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)" - gradientUnits="userSpaceOnUse" - id="linearGradient36468" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="116.62141" - x2="88.785263" - y1="95.337166" - x1="68.361542" - gradientTransform="translate(-15.983875,338)" - gradientUnits="userSpaceOnUse" - id="linearGradient36470" - xlink:href="#linearGradient13938" - inkscape:collect="always" /> - <linearGradient - y2="108.06429" - x2="81.383331" - y1="84.330009" - x1="58.761654" - gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)" - gradientUnits="userSpaceOnUse" - id="linearGradient36472" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient36713" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient36715" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient36717" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient36719" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient36721" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient36723" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="61.720783" - x2="117.12428" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient36725" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient36727" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="126.37626" - x2="273.9993" - y1="108.02418" - x1="260.67468" - gradientTransform="matrix(1,0,0,0.7972867,61.99991,2.2419)" - gradientUnits="userSpaceOnUse" - id="linearGradient36729" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,780.92531,0)" - y2="248.09296" - x2="389.59052" - y1="220.84622" - x1="389.73953" - gradientUnits="userSpaceOnUse" - id="linearGradient37396" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,780.92531,0)" - y2="242.55887" - x2="388.20074" - y1="241.72565" - x1="389.51059" - gradientUnits="userSpaceOnUse" - id="linearGradient37398" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="284.5" - x2="-20" - y1="283" - x1="-20" - gradientTransform="translate(-2)" - gradientUnits="userSpaceOnUse" - id="linearGradient38570" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="284.5" - x2="-20" - y1="283" - x1="-20" - gradientTransform="translate(-2,-582)" - gradientUnits="userSpaceOnUse" - id="linearGradient38572" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - id="linearGradient16500-7" - inkscape:collect="always"> - <stop - id="stop16502-1" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-2" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient1610-7-6"> - <stop - id="stop1611-4-1" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-0-4" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient10069-4-2"> - <stop - id="stop10071-8-3" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-8-2" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient11871-4" - inkscape:collect="always"> - <stop - id="stop11873-5" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop11875-5" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="12" - x2="68" - y1="42" - x1="96" - gradientTransform="matrix(1,0,0,-1,-83,199)" - gradientUnits="userSpaceOnUse" - id="linearGradient39048" - xlink:href="#linearGradient1610-7-6" - inkscape:collect="always" /> - <linearGradient - y2="12" - x2="66" - y1="20" - x1="65" - gradientTransform="matrix(1,0,0,-1,-83,199)" - gradientUnits="userSpaceOnUse" - id="linearGradient39050" - xlink:href="#linearGradient10069-4-2" - inkscape:collect="always" /> - <linearGradient - y2="16" - x2="68" - y1="18" - x1="67.25" - gradientTransform="matrix(1,0,0,-1,-83,199)" - gradientUnits="userSpaceOnUse" - id="linearGradient39052" - xlink:href="#linearGradient11871-4" - inkscape:collect="always" /> - <linearGradient - y2="-33.303608" - x2="88.492455" - y1="-32.339718" - x1="89.975014" - gradientTransform="matrix(0.8422958,0,0,0.8364537,82.535678,2.9394266)" - gradientUnits="userSpaceOnUse" - id="linearGradient39835-9" - xlink:href="#linearGradient35411-4-27" - inkscape:collect="always" /> - <linearGradient - id="linearGradient35411-4-27"> - <stop - style="stop-color:#2b5385;stop-opacity:1;" - offset="0" - id="stop35414-0-9" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop35416-9-5" /> - </linearGradient> - <linearGradient - y2="115.97001" - x2="128.7139" - y1="123.49161" - x1="131.02808" - gradientUnits="userSpaceOnUse" - id="linearGradient39837-4" - xlink:href="#linearGradient35411-8-1-3" - inkscape:collect="always" /> - <linearGradient - id="linearGradient35411-8-1-3"> - <stop - style="stop-color:#2b5385;stop-opacity:1;" - offset="0" - id="stop35414-2-7-1" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop35416-4-1-2" /> - </linearGradient> - <linearGradient - y2="118" - x2="130.48389" - y1="124.27161" - x1="136.35806" - gradientUnits="userSpaceOnUse" - id="linearGradient39839-3" - xlink:href="#linearGradient35411-8-1-3" - inkscape:collect="always" /> - <linearGradient - y2="82.308861" - x2="109.18613" - y1="88.476723" - x1="115.15884" - gradientUnits="userSpaceOnUse" - id="linearGradient39841-3" - xlink:href="#linearGradient23974-5-4" - inkscape:collect="always" /> - <linearGradient - id="linearGradient23974-5-4"> - <stop - style="stop-color:#2561b7;stop-opacity:1;" - offset="0" - id="stop23976-27-1" /> - <stop - style="stop-color:#f9fbff;stop-opacity:1" - offset="1" - id="stop23978-6-1" /> - </linearGradient> - <linearGradient - y2="81.5" - x2="97.75" - y1="84.25" - x1="101" - gradientTransform="translate(21)" - gradientUnits="userSpaceOnUse" - id="linearGradient39843-3" - xlink:href="#linearGradient1610-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-8"> - <stop - id="stop1611-7" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-4" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="89.708977" - x2="96.592278" - y1="81.439644" - x1="87.44548" - gradientTransform="translate(21)" - gradientUnits="userSpaceOnUse" - id="linearGradient39845-2" - xlink:href="#linearGradient319-77" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-77"> - <stop - id="stop320-9" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-31" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="285" - x2="31.498274" - y1="285" - x1="23.959812" - gradientTransform="matrix(1.0369025,0,0,1.5,-458.38567,-344)" - gradientUnits="userSpaceOnUse" - id="linearGradient41540" - xlink:href="#linearGradient22882" - inkscape:collect="always" /> - <linearGradient - y2="285" - x2="31.538462" - y1="285" - x1="24" - gradientTransform="matrix(1.1929722,0,0,0.5,-462.63135,-59)" - gradientUnits="userSpaceOnUse" - id="linearGradient41542" - xlink:href="#linearGradient22882" - inkscape:collect="always" /> - <linearGradient - id="linearGradient23974-4"> - <stop - style="stop-color:#2561b7;stop-opacity:1;" - offset="0" - id="stop23976-20" /> - <stop - style="stop-color:#f9fbff;stop-opacity:1" - offset="1" - id="stop23978-9" /> - </linearGradient> - <linearGradient - y2="128" - x2="125.18381" - y1="111.35809" - x1="139.2112" - gradientUnits="userSpaceOnUse" - id="linearGradient32529-7" - xlink:href="#linearGradient319-37" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-37"> - <stop - id="stop320-2" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-60" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient23974-4" - id="linearGradient41582" - gradientUnits="userSpaceOnUse" - x1="129.62384" - y1="115.76797" - x2="139.07738" - y2="125.77761" /> - <radialGradient - r="8" - fy="77.3125" - fx="430.00003" - cy="77.3125" - cx="430.00003" - gradientTransform="matrix(0.8128508,0,0,0.8128508,80.474142,14.46897)" - gradientUnits="userSpaceOnUse" - id="radialGradient41666" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="38.088879" - x2="199.27217" - y1="38.088879" - x1="210.08989" - gradientTransform="matrix(0.785748,0,0,0.78488,265.93616,46.1048)" - gradientUnits="userSpaceOnUse" - id="linearGradient41668" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="276.92188" - x2="23.25" - y1="277" - x1="28.4375" - gradientTransform="translate(399.01387,-202)" - gradientUnits="userSpaceOnUse" - id="linearGradient41670" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="75.5" - x2="424.75217" - y1="77" - x1="437.98615" - gradientTransform="translate(0.01387)" - gradientUnits="userSpaceOnUse" - id="linearGradient41672" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="75.5" - x2="424.75217" - y1="78" - x1="438.61115" - gradientTransform="translate(0.01387)" - gradientUnits="userSpaceOnUse" - id="linearGradient41674" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="75.5" - x2="424.75217" - y1="77.44017" - x1="441.98615" - gradientTransform="translate(0.01387)" - gradientUnits="userSpaceOnUse" - id="linearGradient41676" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="261.44183" - x2="237.92474" - y1="285.63672" - x1="258.94861" - gradientUnits="userSpaceOnUse" - id="linearGradient42432" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="116.54932" - x2="130.54761" - y1="122.90726" - x1="135.45557" - gradientUnits="userSpaceOnUse" - id="linearGradient42435" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="129.27184" - x2="143.88347" - y1="111.81818" - x1="125.81818" - gradientUnits="userSpaceOnUse" - id="linearGradient42437" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient38796-7-9"> - <stop - id="stop38798-6-8" - offset="0" - style="stop-color:#fc9694;stop-opacity:1;" /> - <stop - id="stop38800-1-8" - offset="1" - style="stop-color:#e71609;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient1610-87"> - <stop - id="stop1611-78" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-3" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient24679-1"> - <stop - id="stop24681-0" - offset="0" - style="stop-color:#3d361a;stop-opacity:1;" /> - <stop - style="stop-color:#d1c595;stop-opacity:1;" - offset="0.45537567" - id="stop24683-7" /> - <stop - id="stop24685-3" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="122.36016" - x2="134.91479" - y1="111.2683" - x1="125.99933" - gradientUnits="userSpaceOnUse" - id="linearGradient38719" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="122.36016" - x2="134.91479" - y1="112.53999" - x1="126.72586" - gradientUnits="userSpaceOnUse" - id="linearGradient38722" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="99.029617" - x2="99.628899" - y1="113.45913" - x1="111.46314" - gradientTransform="translate(19.367382)" - gradientUnits="userSpaceOnUse" - id="linearGradient38724" - xlink:href="#linearGradient13973" - inkscape:collect="always" /> - <linearGradient - y2="131.03783" - x2="143.69765" - y1="114.2303" - x1="127.63637" - gradientUnits="userSpaceOnUse" - id="linearGradient38726" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="77.877228" - x2="410.47467" - y1="68.853401" - x1="400.90442" - gradientUnits="userSpaceOnUse" - id="linearGradient39142" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="337.517" - x2="337.80573" - y1="323" - x1="308" - gradientTransform="translate(-157.00004,-233.00002)" - gradientUnits="userSpaceOnUse" - id="linearGradient38005" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="325" - x2="286.60001" - y1="323.80002" - x1="285.39999" - gradientUnits="userSpaceOnUse" - id="linearGradient38007" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1501868" - fy="33.548397" - fx="-67.890839" - cy="33.548397" - cx="-67.890839" - gradientTransform="matrix(0.4098275,-0.6406034,2.5104141,1.6060416,-127.46107,-65.792415)" - gradientUnits="userSpaceOnUse" - id="radialGradient43410-4" - xlink:href="#linearGradient43276-0" - inkscape:collect="always" /> - <linearGradient - id="linearGradient43276-0" - inkscape:collect="always"> - <stop - id="stop43278-9" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop43280-4" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="3.1501868" - fy="34.896461" - fx="-74.960228" - cy="34.896461" - cx="-74.960228" - gradientTransform="matrix(0.4098275,-0.7183766,2.5885772,1.4767588,-130.41049,-65.518114)" - gradientUnits="userSpaceOnUse" - id="radialGradient43412-8" - xlink:href="#linearGradient43276-0" - inkscape:collect="always" /> - <linearGradient - y2="55.566177" - x2="60.981617" - y1="54.1525" - x1="59.622501" - gradientTransform="translate(0,-21)" - gradientUnits="userSpaceOnUse" - id="linearGradient40270" - xlink:href="#linearGradient38796-7-9" - inkscape:collect="always" /> - <linearGradient - y2="54.130001" - x2="57.789688" - y1="56.5" - x1="60.25" - gradientTransform="translate(-0.5,-21)" - gradientUnits="userSpaceOnUse" - id="linearGradient40272" - xlink:href="#linearGradient1610-87" - inkscape:collect="always" /> - <linearGradient - y2="52.25" - x2="56" - y1="56.5" - x1="60.25" - gradientTransform="translate(-0.5,-21)" - gradientUnits="userSpaceOnUse" - id="linearGradient40274" - xlink:href="#linearGradient1610-87" - inkscape:collect="always" /> - <linearGradient - y2="34.685287" - x2="60.676094" - y1="37.960625" - x1="63.666252" - gradientTransform="translate(-1.54625,-1)" - gradientUnits="userSpaceOnUse" - id="linearGradient40276" - xlink:href="#linearGradient1610-87" - inkscape:collect="always" /> - <linearGradient - y2="62.960247" - x2="50.371208" - y1="65.644958" - x1="52.17437" - gradientTransform="translate(0,-21)" - gradientUnits="userSpaceOnUse" - id="linearGradient40278" - xlink:href="#linearGradient24679-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient24143-0"> - <stop - style="stop-color:#2c2c2c;stop-opacity:1;" - offset="0" - id="stop24145-0" /> - <stop - id="stop24669-1" - offset="0.5" - style="stop-color:#b3b3b3;stop-opacity:1;" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop24147-4" /> - </linearGradient> - <linearGradient - y2="-89.026711" - x2="-28.177105" - y1="-121.58411" - x1="-70.605209" - gradientTransform="translate(22)" - gradientUnits="userSpaceOnUse" - id="linearGradient39686-1" - xlink:href="#linearGradient1610-3-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-3-7"> - <stop - id="stop1611-1-4" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-6-0" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="-103.2075" - x2="-55.5975" - y1="-124" - x1="-74" - gradientTransform="translate(22)" - gradientUnits="userSpaceOnUse" - id="linearGradient39688-9" - xlink:href="#linearGradient319-5-9-4" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-5-9-4"> - <stop - id="stop320-761-8-8" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-89-24-8" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient37542-6"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-18" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-92" /> - </linearGradient> - <linearGradient - id="linearGradient16500-3"> - <stop - id="stop16502-3" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-41" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient9030-1"> - <stop - id="stop9032-9" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop9034-8" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient59371"> - <stop - id="stop59373" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop59375" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="168" - x2="29.972469" - y1="155.66899" - x1="25.963812" - gradientTransform="translate(301.02752,449.99999)" - gradientUnits="userSpaceOnUse" - id="linearGradient42965-7" - xlink:href="#linearGradient319-9-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-9-1"> - <stop - id="stop320-92-1" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-55-5" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="628.20752" - x2="337.04251" - y1="607.09375" - x1="335.96875" - gradientUnits="userSpaceOnUse" - id="linearGradient42967-6" - xlink:href="#linearGradient1610-06-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-06-1"> - <stop - id="stop1611-8-4" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-1-2" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="122.92735" - x2="135.00615" - y1="80.045052" - x1="98.858559" - gradientUnits="userSpaceOnUse" - id="linearGradient41266" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="243.31177" - x2="129.24866" - y1="245.03757" - x1="130.75166" - gradientUnits="userSpaceOnUse" - id="linearGradient41268" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="129.82761" - x2="144.22272" - y1="112.31642" - x1="126.37006" - gradientUnits="userSpaceOnUse" - id="linearGradient41270" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient41272" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="500" - x2="54.8125" - y1="500" - x1="108" - gradientTransform="translate(146.00001,-20)" - gradientUnits="userSpaceOnUse" - id="linearGradient40918" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="501.10059" - x2="41.311054" - y1="502.71924" - x1="88.874489" - gradientTransform="translate(146.00001,-20)" - gradientUnits="userSpaceOnUse" - id="linearGradient40920" - xlink:href="#linearGradient15809" - inkscape:collect="always" /> - <linearGradient - y2="501.58331" - x2="76.885078" - y1="504.67188" - x1="80.768944" - gradientUnits="userSpaceOnUse" - id="linearGradient40922" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="501.04794" - x2="78.000008" - y1="511.42972" - x1="89.526657" - gradientUnits="userSpaceOnUse" - id="linearGradient40924" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="492.15359" - fx="75.95578" - cy="492.15359" - cx="75.95578" - gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,404.60763,237.35923)" - gradientUnits="userSpaceOnUse" - id="radialGradient40926" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <radialGradient - r="2.9089756" - fy="503.81497" - fx="79.959885" - cy="503.81497" - cx="79.959885" - gradientTransform="matrix(1.9435203,-2.1990242,1.1704696,1.0049395,-665.14472,173.40654)" - gradientUnits="userSpaceOnUse" - id="radialGradient40928" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="499.99969" - fx="74.518959" - cy="499.99969" - cx="74.518959" - gradientTransform="matrix(0.8886193,0.8021825,-0.8051059,0.8972684,411.80247,-8.668512)" - gradientUnits="userSpaceOnUse" - id="radialGradient40930" - xlink:href="#linearGradient14262" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="499.87418" - fx="75.054749" - cy="499.87418" - cx="75.054749" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient40932" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - y2="245.13458" - x2="30.713354" - y1="199.5118" - x1="-16.608393" - gradientTransform="matrix(-1.1511102,0,0,-1.1511102,152.68442,762.00423)" - gradientUnits="userSpaceOnUse" - id="linearGradient36549" - xlink:href="#linearGradient37542-6" - inkscape:collect="always" /> - <radialGradient - r="6.5" - fy="243.37001" - fx="32.193073" - cy="243.37001" - cx="32.193073" - gradientTransform="matrix(0.6959954,0.116912,-0.04402498,0.2620878,107.60035,414.99606)" - gradientUnits="userSpaceOnUse" - id="radialGradient36551" - xlink:href="#linearGradient16500-3" - inkscape:collect="always" /> - <linearGradient - y2="251.99768" - x2="35.615856" - y1="233.6039" - x1="32.204613" - gradientTransform="matrix(-0.9999993,0,0,-0.9821923,147.99998,720.60935)" - gradientUnits="userSpaceOnUse" - id="linearGradient36553" - xlink:href="#linearGradient24143-0" - inkscape:collect="always" /> - <linearGradient - y2="101.28939" - x2="114.11786" - y1="134.53409" - x1="148.76726" - gradientUnits="userSpaceOnUse" - id="linearGradient36555" - xlink:href="#linearGradient16500-3" - inkscape:collect="always" /> - <linearGradient - y2="163.00024" - x2="477.10818" - y1="163.09677" - x1="481.60803" - gradientTransform="matrix(0.7500336,0,0,0.8546123,-239.89087,340.17205)" - gradientUnits="userSpaceOnUse" - id="linearGradient36557" - xlink:href="#linearGradient40809" - inkscape:collect="always" /> - <linearGradient - y2="160.80888" - x2="463.90472" - y1="164.64572" - x1="473.79471" - gradientTransform="matrix(0.7500181,0,0,0.8546123,-235.38338,339.18935)" - gradientUnits="userSpaceOnUse" - id="linearGradient36559" - xlink:href="#linearGradient59371" - inkscape:collect="always" /> - <linearGradient - y2="132.61403" - x2="144.33401" - y1="118" - x1="129.74713" - gradientUnits="userSpaceOnUse" - id="linearGradient36561" - xlink:href="#linearGradient9030-1" - inkscape:collect="always" /> - <linearGradient - y2="116.14438" - x2="126.18426" - y1="124.90586" - x1="138.46678" - gradientUnits="userSpaceOnUse" - id="linearGradient36563" - xlink:href="#linearGradient16500-3" - inkscape:collect="always" /> - <linearGradient - id="linearGradient9030-7-8-6"> - <stop - id="stop9032-4-9-2" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop9034-0-2-3" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient40809-2-2"> - <stop - id="stop40811-1-6" - offset="0" - style="stop-color:#0059d7;stop-opacity:1;" /> - <stop - id="stop40813-4-2" - offset="1" - style="stop-color:#b7d4ff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient20055-7-5-5"> - <stop - style="stop-color:#0a2a5a;stop-opacity:1;" - offset="0" - id="stop20057-1-7-7" /> - <stop - style="stop-color:#3771c8;stop-opacity:1;" - offset="1" - id="stop20059-1-6-8" /> - </linearGradient> - <linearGradient - id="linearGradient16500-4-9-7"> - <stop - id="stop16502-8-5-8" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-8-4-0" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient37829"> - <stop - style="stop-color:#3d361a;stop-opacity:1;" - offset="0" - id="stop37831" /> - <stop - id="stop37833" - offset="0.5" - style="stop-color:#d1c595;stop-opacity:1;" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37835" /> - </linearGradient> - <linearGradient - id="linearGradient40578-4-8"> - <stop - id="stop40580-8-9" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop40582-6-8" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="30.023426" - x2="278.25537" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient39254" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="6.9000001" - fy="206.40076" - fx="756.83508" - cy="206.40076" - cx="756.83508" - gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)" - gradientUnits="userSpaceOnUse" - id="radialGradient39256" - xlink:href="#linearGradient40578-4-8" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(670,-33)" - gradientUnits="userSpaceOnUse" - id="linearGradient39258" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="300.83292" - x1="754.28558" - gradientTransform="translate(0,-95.999998)" - gradientUnits="userSpaceOnUse" - id="linearGradient39260" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - id="linearGradient40455-7"> - <stop - style="stop-color:#fff991;stop-opacity:1;" - offset="0" - id="stop40457-6" /> - <stop - style="stop-color:#fffbb9;stop-opacity:0;" - offset="1" - id="stop40459-1" /> - </linearGradient> - <linearGradient - y2="30.023426" - x2="278.25537" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient36657" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="6.9000001" - fy="206.40076" - fx="756.83508" - cy="206.40076" - cx="756.83508" - gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)" - gradientUnits="userSpaceOnUse" - id="radialGradient36659" - xlink:href="#linearGradient40578-4-8" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(670,-33)" - gradientUnits="userSpaceOnUse" - id="linearGradient36661" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="300.83292" - x1="754.28558" - gradientTransform="translate(0,-95.999998)" - gradientUnits="userSpaceOnUse" - id="linearGradient36663" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="288.70752" - x2="253.86414" - y1="247.85646" - x1="261.17639" - gradientTransform="matrix(-0.9999993,0,0,-0.9821923,165.4,716.20935)" - gradientUnits="userSpaceOnUse" - id="linearGradient37089" - xlink:href="#linearGradient37829" - inkscape:collect="always" /> - <linearGradient - y2="262.27994" - x2="263.60016" - y1="247.008" - x1="261.60016" - gradientTransform="matrix(-0.888884,0,0,-0.8730569,136.66557,688.20759)" - gradientUnits="userSpaceOnUse" - id="linearGradient37091" - xlink:href="#linearGradient39080" - inkscape:collect="always" /> - <linearGradient - y2="265.9697" - x2="50.485012" - y1="232.59058" - x1="19.923029" - gradientTransform="translate(-124.99991,219.9903)" - gradientUnits="userSpaceOnUse" - id="linearGradient37093" - xlink:href="#linearGradient9030-7-8-6" - inkscape:collect="always" /> - <linearGradient - y2="144.5041" - x2="193.7029" - y1="144.5041" - x1="199.26254" - gradientTransform="matrix(0.7500336,0,0,0.8546123,-239.89087,340.17205)" - gradientUnits="userSpaceOnUse" - id="linearGradient37096" - xlink:href="#linearGradient40809-2-2" - inkscape:collect="always" /> - <linearGradient - y2="49.84375" - x2="576.4375" - y1="54.299286" - x1="579.625" - gradientTransform="translate(-670.99999,411.99999)" - gradientUnits="userSpaceOnUse" - id="linearGradient37098" - xlink:href="#linearGradient20055-7-5-5" - inkscape:collect="always" /> - <linearGradient - y2="49.87711" - x2="575.70361" - y1="56.363762" - x1="582.79974" - gradientTransform="translate(-670.99999,411.99999)" - gradientUnits="userSpaceOnUse" - id="linearGradient37100" - xlink:href="#linearGradient16500-4-9-7" - inkscape:collect="always" /> - <linearGradient - y2="132.61403" - x2="144.33401" - y1="118" - x1="129.74713" - gradientUnits="userSpaceOnUse" - id="linearGradient37102" - xlink:href="#linearGradient9030-7-8-6" - inkscape:collect="always" /> - <linearGradient - y2="116.40535" - x2="132.25548" - y1="123.96156" - x1="140.78264" - gradientUnits="userSpaceOnUse" - id="linearGradient37104" - xlink:href="#linearGradient16500-4-9-7" - inkscape:collect="always" /> - <radialGradient - r="4.9999957" - fy="95.970413" - fx="-73.135666" - cy="95.970413" - cx="-73.135666" - gradientTransform="matrix(0.7881042,0.01544832,-0.01690407,0.7184169,-16.705439,29.204304)" - gradientUnits="userSpaceOnUse" - id="radialGradient37553" - xlink:href="#linearGradient40455-7" - inkscape:collect="always" /> - <radialGradient - r="6.9000001" - fy="206.8443" - fx="756.98285" - cy="206.8443" - cx="756.98285" - gradientTransform="matrix(0.4604901,-0.4901463,0.6187826,0.5813434,279.52277,457.42224)" - gradientUnits="userSpaceOnUse" - id="radialGradient37555" - xlink:href="#linearGradient37667" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="243.96121" - x1="89.012573" - gradientTransform="translate(670,-33)" - gradientUnits="userSpaceOnUse" - id="linearGradient37558" - xlink:href="#linearGradient58334" - inkscape:collect="always" /> - <linearGradient - y2="305.53677" - x2="758.62622" - y1="300.83292" - x1="754.28558" - gradientTransform="translate(1,-94.999998)" - gradientUnits="userSpaceOnUse" - id="linearGradient37561" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <radialGradient - r="4.9999957" - fy="95.949913" - fx="-73.227486" - cy="95.949913" - cx="-73.227486" - gradientTransform="matrix(0.7881042,0.01544832,-0.01690407,0.7184169,-16.705439,29.204304)" - gradientUnits="userSpaceOnUse" - id="radialGradient37553-2" - xlink:href="#linearGradient40455-7-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient40455-7-1"> - <stop - style="stop-color:#fff991;stop-opacity:1;" - offset="0" - id="stop40457-6-6" /> - <stop - style="stop-color:#fffbb9;stop-opacity:0;" - offset="1" - id="stop40459-1-8" /> - </linearGradient> - <radialGradient - r="6.9000001" - fy="206.40076" - fx="756.83508" - cy="206.40076" - cx="756.83508" - gradientTransform="matrix(0.4769848,-0.5257394,0.6056598,0.5494938,269.68012,490.96577)" - gradientUnits="userSpaceOnUse" - id="radialGradient37555-5" - xlink:href="#linearGradient40578-4-8-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient40578-4-8-7"> - <stop - id="stop40580-8-9-6" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop40582-6-8-1" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="249" - x2="93.0625" - y1="243.96121" - x1="89.012573" - gradientTransform="translate(670,-33)" - gradientUnits="userSpaceOnUse" - id="linearGradient37558-8" - xlink:href="#linearGradient58334-9" - inkscape:collect="always" /> - <linearGradient - id="linearGradient58334-9"> - <stop - style="stop-color:#ffffff;stop-opacity:0.87628865;" - offset="0.0000000" - id="stop58336-27" /> - <stop - style="stop-color:#fffffe;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop58338-9" /> - </linearGradient> - <linearGradient - id="linearGradient16500-4" - inkscape:collect="always"> - <stop - id="stop16502-31" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-23" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient16500-4" - id="linearGradient37610-3" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(1,-94.999998)" - x1="754.28558" - y1="300.83292" - x2="758" - y2="305" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)" - gradientUnits="userSpaceOnUse" - id="linearGradient71834" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="107.18619" - x2="79.355118" - y1="97.5" - x1="70.55275" - gradientTransform="translate(-15.983875,338)" - gradientUnits="userSpaceOnUse" - id="linearGradient71836" - xlink:href="#linearGradient71814" - inkscape:collect="always" /> - <linearGradient - y2="112.03586" - x2="86.00116" - y1="88.058716" - x1="61.465469" - gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)" - gradientUnits="userSpaceOnUse" - id="linearGradient71838" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(522.00015,466)" - y2="22.485678" - x2="-18.85" - y1="36.47311" - x1="-22" - gradientUnits="userSpaceOnUse" - id="linearGradient37188" - xlink:href="#linearGradient38256" - inkscape:collect="always" /> - <linearGradient - y2="340" - x2="343.26239" - y1="323" - x1="308" - gradientTransform="translate(168.00015,169.99998)" - gradientUnits="userSpaceOnUse" - id="linearGradient37191" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - gradientTransform="translate(522.00015,466)" - y2="30.200407" - x2="-27" - y1="38" - x1="-26" - gradientUnits="userSpaceOnUse" - id="linearGradient37201" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-7409"> - <stop - id="stop1611-488" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-2" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient40578-4-8-5"> - <stop - id="stop40580-8-9-5" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop40582-6-8-17" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient58334-1"> - <stop - style="stop-color:#ffffff;stop-opacity:0.87628865;" - offset="0.0000000" - id="stop58336-5" /> - <stop - style="stop-color:#fffffe;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop58338-27" /> - </linearGradient> - <linearGradient - id="linearGradient16500-14" - inkscape:collect="always"> - <stop - id="stop16502-23" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-22" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="26.239208" - x2="272.92456" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient37317" - xlink:href="#linearGradient1610-7409" - inkscape:collect="always" /> - <radialGradient - r="6.9000001" - fy="206.40076" - fx="756.83508" - cy="206.40076" - cx="756.83508" - gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)" - gradientUnits="userSpaceOnUse" - id="radialGradient37319" - xlink:href="#linearGradient40578-4-8-5" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(670,-33)" - gradientUnits="userSpaceOnUse" - id="linearGradient37321" - xlink:href="#linearGradient58334-1" - inkscape:collect="always" /> - <linearGradient - y2="305.51749" - x2="758.77625" - y1="301.01553" - x1="754.1275" - gradientTransform="translate(0,-95.999998)" - gradientUnits="userSpaceOnUse" - id="linearGradient37323" - xlink:href="#linearGradient16500-14" - inkscape:collect="always" /> - <linearGradient - y2="44.322407" - x2="36.74033" - y1="53" - x1="37" - gradientTransform="translate(461.00015,453)" - gradientUnits="userSpaceOnUse" - id="linearGradient37338" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,992,0)" - y2="36" - x2="494" - y1="36" - x1="510.25" - gradientUnits="userSpaceOnUse" - id="linearGradient37132" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,992,0)" - y2="43" - x2="503" - y1="33" - x1="492" - gradientUnits="userSpaceOnUse" - id="linearGradient37134" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="35" - x2="483" - y1="35" - x1="497.3125" - gradientTransform="matrix(-1,0,0,1,551,105)" - gradientUnits="userSpaceOnUse" - id="linearGradient37136" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="35" - x2="483" - y1="35" - x1="497.3125" - gradientTransform="matrix(-1,0,0,1,551,105)" - gradientUnits="userSpaceOnUse" - id="linearGradient37138" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - id="linearGradient40455-7-1-7"> - <stop - style="stop-color:#fff991;stop-opacity:1;" - offset="0" - id="stop40457-6-6-4" /> - <stop - style="stop-color:#fffbb9;stop-opacity:0;" - offset="1" - id="stop40459-1-8-0" /> - </linearGradient> - <linearGradient - y2="249.73875" - x2="28.275171" - y1="203.3882" - x1="-9.3937483" - gradientTransform="matrix(0.923955,0,0,1,2.85168,-84)" - gradientUnits="userSpaceOnUse" - id="linearGradient38362" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <radialGradient - r="4.9999957" - fy="94.935921" - fx="-73.972397" - cy="94.935921" - cx="-73.972397" - gradientTransform="matrix(1.1033468,0.01995877,-0.02366572,0.9281732,7.8124646,13.285893)" - gradientUnits="userSpaceOnUse" - id="radialGradient38364" - xlink:href="#linearGradient40455-7-1-7" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(1,0,0,0.8461542,0,25.615323)" - y2="167.11429" - x2="38.580528" - y1="143.17894" - x1="19.210167" - gradientUnits="userSpaceOnUse" - id="linearGradient38367" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient43276-6" - inkscape:collect="always"> - <stop - id="stop43278-0" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop43280-49" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="3.1501868" - fy="33.548397" - fx="-67.890839" - cy="33.548397" - cx="-67.890839" - gradientTransform="matrix(0.4098275,-0.6406034,2.5104141,1.6060416,-127.46107,-65.792415)" - gradientUnits="userSpaceOnUse" - id="radialGradient38734" - xlink:href="#linearGradient43276-6" - inkscape:collect="always" /> - <radialGradient - r="3.1501868" - fy="34.896461" - fx="-74.960228" - cy="34.896461" - cx="-74.960228" - gradientTransform="matrix(0.4098275,-0.7183766,2.5885772,1.4767588,-130.41049,-65.518114)" - gradientUnits="userSpaceOnUse" - id="radialGradient38736" - xlink:href="#linearGradient43276-6" - inkscape:collect="always" /> - <linearGradient - y2="77.877228" - x2="410.47467" - y1="68.853401" - x1="400.90442" - gradientUnits="userSpaceOnUse" - id="linearGradient36718" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="56.357628" - x2="121.22078" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient38049" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="341" - x2="-49" - y1="342.0625" - x1="-56.5" - gradientTransform="translate(207,-246.99988)" - gradientUnits="userSpaceOnUse" - id="linearGradient38051" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="56.357628" - x2="121.22078" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient37530" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="341" - x2="-49" - y1="342.0625" - x1="-56.5" - gradientTransform="translate(207,-246.99988)" - gradientUnits="userSpaceOnUse" - id="linearGradient37534" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-6"> - <stop - id="stop1611-18" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-92" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient10069-9"> - <stop - id="stop10071-5" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-43" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="120.14633" - x2="134.62978" - y1="111.30384" - x1="124.19057" - gradientUnits="userSpaceOnUse" - id="linearGradient38254" - xlink:href="#linearGradient10069-9" - inkscape:collect="always" /> - <linearGradient - y2="183.6826" - x2="116.05637" - y1="248.13905" - x1="189.76083" - gradientUnits="userSpaceOnUse" - id="linearGradient37509" - xlink:href="#linearGradient1610-6" - inkscape:collect="always" /> - <linearGradient - y2="118.98331" - x2="132.99687" - y1="111.03492" - x1="123.80045" - gradientUnits="userSpaceOnUse" - id="linearGradient37613" - xlink:href="#linearGradient10069-9" - inkscape:collect="always" /> - <linearGradient - y2="183.6826" - x2="116.05637" - y1="248.13905" - x1="189.76083" - gradientUnits="userSpaceOnUse" - id="linearGradient37615" - xlink:href="#linearGradient1610-6" - inkscape:collect="always" /> - <linearGradient - y2="68.279541" - x2="-45.074585" - y1="101.82622" - x1="-14.752135" - gradientTransform="translate(0,22)" - gradientUnits="userSpaceOnUse" - id="linearGradient38073-8" - xlink:href="#linearGradient15425-4-9-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient15425-4-9-8"> - <stop - id="stop15427-5-8-24" - offset="0" - style="stop-color:#960000;stop-opacity:1;" /> - <stop - id="stop15429-8-2-5" - offset="1" - style="stop-color:#c80000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="118.00494" - x2="131.35606" - y1="124.67571" - x1="137.33838" - gradientUnits="userSpaceOnUse" - id="linearGradient38075-5" - xlink:href="#linearGradient5060-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient5060-1"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop5062-7" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop5064-1" /> - </linearGradient> - <linearGradient - y2="136.15825" - x2="146.01884" - y1="111.48302" - x1="127.15736" - gradientUnits="userSpaceOnUse" - id="linearGradient38077-1" - xlink:href="#linearGradient319-52" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-52"> - <stop - id="stop320-7614" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-232" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="94" - x2="-22" - y1="101" - x1="-15" - gradientTransform="translate(0,22)" - gradientUnits="userSpaceOnUse" - id="linearGradient38079-2" - xlink:href="#linearGradient15425-4-9-8" - inkscape:collect="always" /> - <linearGradient - y2="115.81818" - x2="130.33557" - y1="127.35454" - x1="139.29807" - gradientUnits="userSpaceOnUse" - id="linearGradient14433-1" - xlink:href="#linearGradient14418-6" - inkscape:collect="always" /> - <linearGradient - id="linearGradient14418-6"> - <stop - style="stop-color:#fa2509;stop-opacity:1;" - offset="0" - id="stop14420-8" /> - <stop - style="stop-color:#fa2509;stop-opacity:0;" - offset="1" - id="stop14422-5" /> - </linearGradient> - <linearGradient - y2="120.76331" - x2="135.22182" - y1="110.81054" - x1="125.36379" - gradientUnits="userSpaceOnUse" - id="linearGradient14435-7" - xlink:href="#linearGradient319-52" - inkscape:collect="always" /> - <linearGradient - y2="127.52184" - x2="141.43347" - y1="111.81818" - x1="125.81818" - gradientUnits="userSpaceOnUse" - id="linearGradient14437-6" - xlink:href="#linearGradient319-52" - inkscape:collect="always" /> - <linearGradient - y2="118.69846" - x2="132.35237" - y1="111.38132" - x1="125.20553" - gradientUnits="userSpaceOnUse" - id="linearGradient14439-9" - xlink:href="#linearGradient10069-2" - inkscape:collect="always" /> - <linearGradient - id="linearGradient10069-2"> - <stop - id="stop10071-79" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-5" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="129.27184" - x2="143.88347" - y1="111.81818" - x1="125.81818" - gradientUnits="userSpaceOnUse" - id="linearGradient14441-4" - xlink:href="#linearGradient319-52" - inkscape:collect="always" /> - <radialGradient - r="9.1978254" - fy="126.63337" - fx="131.99811" - cy="126.63337" - cx="131.99811" - gradientTransform="matrix(2.4461753,0.01083717,0.0036163,6.752143,-191.34795,-740.3814)" - gradientUnits="userSpaceOnUse" - id="radialGradient38306-3" - xlink:href="#linearGradient48327-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient48327-1"> - <stop - id="stop48329-23" - offset="0" - style="stop-color:black;stop-opacity:0;" /> - <stop - id="stop48331-3" - offset="1" - style="stop-color:black;stop-opacity:1;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient10069-74-1" - id="linearGradient37646-4" - gradientUnits="userSpaceOnUse" - x1="125.20553" - y1="111.38132" - x2="132.35237" - y2="118.69846" /> - <linearGradient - id="linearGradient10069-74-1"> - <stop - id="stop10071-0-1" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-9-3" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient319-7409-3-7"> - <stop - id="stop320-48-8-4" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-82-6-27" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="129.27184" - x2="143.88347" - y1="111.81818" - x1="125.81818" - gradientUnits="userSpaceOnUse" - id="linearGradient38313-7" - xlink:href="#linearGradient319-7409-3-7" - inkscape:collect="always" /> - <linearGradient - y2="129.27184" - x2="143.88347" - y1="115.87343" - x1="130.60338" - gradientUnits="userSpaceOnUse" - id="linearGradient37677" - xlink:href="#linearGradient319-7409-3-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-19"> - <stop - id="stop320-865" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-02" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient10069-8-3-3"> - <stop - id="stop10071-9-8-7" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-2-7-1" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient319-95-2-7"> - <stop - id="stop320-43-7-3" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-12-7-4" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient21327-6"> - <stop - id="stop21329-3" - offset="0" - style="stop-color:#1e3e70;stop-opacity:1;" /> - <stop - id="stop21331-4" - offset="1" - style="stop-color:#1e3e70;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient20055-8-4"> - <stop - style="stop-color:#0a2a5a;stop-opacity:1;" - offset="0" - id="stop20057-8-0" /> - <stop - style="stop-color:#3771c8;stop-opacity:1;" - offset="1" - id="stop20059-2-0" /> - </linearGradient> - <linearGradient - id="linearGradient39088"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop39090" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop39092" /> - </linearGradient> - <linearGradient - id="linearGradient1610-83"> - <stop - id="stop1611-24" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-11" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient10069-95"> - <stop - id="stop10071-10" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-64" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient11871-3" - inkscape:collect="always"> - <stop - id="stop11873-0" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop11875-8" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient10069-3"> - <stop - id="stop10071-87" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-42" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="56.357628" - x2="121.22078" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient39630" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="341" - x2="-49" - y1="342.0625" - x1="-56.5" - gradientTransform="translate(207,-246.99988)" - gradientUnits="userSpaceOnUse" - id="linearGradient39632" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="54.6674" - x2="120.06789" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient40171" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient40173" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient40175" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="54.6674" - x2="120.06789" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient40280" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="348" - x2="-56.5" - y1="340.32199" - x1="-56.5" - gradientUnits="userSpaceOnUse" - id="linearGradient40282" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="329.26965" - x2="-47.214466" - y1="329.06256" - x1="-56.8125" - gradientTransform="translate(0,13)" - gradientUnits="userSpaceOnUse" - id="linearGradient40284" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-65.250412" - x2="340" - y1="-105.87541" - x1="301.5" - gradientTransform="translate(-420,490.00041)" - gradientUnits="userSpaceOnUse" - id="linearGradient38689" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientUnits="userSpaceOnUse" - id="linearGradient38693" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(6)" - gradientUnits="userSpaceOnUse" - id="linearGradient38695" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(0,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient38697" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(6,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient38701" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(24,-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient38703" - xlink:href="#linearGradient16500-7" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="413.51562" - x1="-90.5" - gradientTransform="rotate(180,-78.5,410.51562)" - gradientUnits="userSpaceOnUse" - id="linearGradient38706" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-65.250412" - x2="340" - y1="-105.87541" - x1="301.5" - gradientTransform="matrix(0.3846148,0,0,1,-211.38442,490.00041)" - gradientUnits="userSpaceOnUse" - id="linearGradient38720" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(8)" - gradientUnits="userSpaceOnUse" - id="linearGradient38723" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(8,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient38725" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(24,-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient38727" - xlink:href="#linearGradient16500-7" - inkscape:collect="always" /> - <linearGradient - y2="416.32614" - x2="-86.75" - y1="413.98114" - x1="-89.75" - gradientTransform="rotate(180,-78,410.51562)" - gradientUnits="userSpaceOnUse" - id="linearGradient38729" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(24,-2.4825165)" - gradientUnits="userSpaceOnUse" - id="linearGradient38731" - xlink:href="#linearGradient16500-7" - inkscape:collect="always" /> - <linearGradient - y2="416.32614" - x2="-86.75" - y1="413.98114" - x1="-89.75" - gradientTransform="rotate(180,-78,412.27437)" - gradientUnits="userSpaceOnUse" - id="linearGradient38736" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-65.250412" - x2="340" - y1="-105.87541" - x1="301.5" - gradientTransform="translate(-420,490.00041)" - gradientUnits="userSpaceOnUse" - id="linearGradient39199" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientUnits="userSpaceOnUse" - id="linearGradient39201" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(6)" - gradientUnits="userSpaceOnUse" - id="linearGradient39203" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(0,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient39205" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(6,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient39207" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="-65.250412" - x2="340" - y1="-105.87541" - x1="301.5" - gradientTransform="translate(-420,490.00041)" - gradientUnits="userSpaceOnUse" - id="linearGradient39246" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientUnits="userSpaceOnUse" - id="linearGradient39248" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(6)" - gradientUnits="userSpaceOnUse" - id="linearGradient39252" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(0,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient39255" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="413.51562" - x2="-88" - y1="408" - x1="-97" - gradientTransform="translate(6,6)" - gradientUnits="userSpaceOnUse" - id="linearGradient39259" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="568" - x2="495" - y1="568" - x1="488.5" - gradientUnits="userSpaceOnUse" - id="linearGradient38961" - xlink:href="#linearGradient1610-83" - inkscape:collect="always" /> - <linearGradient - y2="580.63715" - x2="490.65796" - y1="531.95105" - x1="487.2518" - gradientUnits="userSpaceOnUse" - id="linearGradient39115" - xlink:href="#linearGradient1610-83" - inkscape:collect="always" /> - <linearGradient - y2="540.13623" - x2="498.40021" - y1="537.78113" - x1="496.49335" - gradientUnits="userSpaceOnUse" - id="linearGradient39117" - xlink:href="#linearGradient11871-3" - inkscape:collect="always" /> - <linearGradient - y2="539.75" - x2="495.25" - y1="541.69116" - x1="495.85294" - gradientUnits="userSpaceOnUse" - id="linearGradient39119" - xlink:href="#linearGradient11871-3" - inkscape:collect="always" /> - <linearGradient - y2="541.02698" - x2="496.21078" - y1="532.42651" - x1="494.38467" - gradientUnits="userSpaceOnUse" - id="linearGradient39122" - xlink:href="#linearGradient10069-3" - inkscape:collect="always" /> - <linearGradient - y2="134.12131" - x2="147.08464" - y1="106.08706" - x1="122.25188" - gradientUnits="userSpaceOnUse" - id="linearGradient39261" - xlink:href="#linearGradient40703" - inkscape:collect="always" /> - <linearGradient - y2="137.52937" - x2="145.729" - y1="97.375854" - x1="116.75861" - gradientUnits="userSpaceOnUse" - id="linearGradient39263" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient39265" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-46"> - <stop - id="stop320-03" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-62" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="661.93829" - x2="58.680996" - y1="641.73358" - x1="39.102718" - gradientTransform="translate(-20)" - gradientUnits="userSpaceOnUse" - id="linearGradient39508" - xlink:href="#linearGradient319-46" - inkscape:collect="always" /> - <linearGradient - y2="341.23715" - x2="634.09503" - y1="355.85541" - x1="648.09674" - gradientUnits="userSpaceOnUse" - id="linearGradient39518" - xlink:href="#linearGradient43807" - inkscape:collect="always" /> - <linearGradient - y2="349.93216" - x2="643.71313" - y1="403.93069" - x1="696.63055" - gradientUnits="userSpaceOnUse" - id="linearGradient39520" - xlink:href="#linearGradient39088" - inkscape:collect="always" /> - <linearGradient - y2="354.92981" - x2="649.69073" - y1="338.95337" - x1="633.10468" - gradientTransform="matrix(0.8461524,0,0,0.8461523,99.385524,54.308237)" - gradientUnits="userSpaceOnUse" - id="linearGradient39523" - xlink:href="#linearGradient10069-95" - inkscape:collect="always" /> - <linearGradient - y2="132.44617" - x2="142.1468" - y1="106.4641" - x1="121.80637" - gradientUnits="userSpaceOnUse" - id="linearGradient39716" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient39718" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="112.03586" - x2="86.00116" - y1="82.75322" - x1="57.347244" - gradientTransform="matrix(0.9998599,0,0,0.9960071,131.027,-79.5885)" - gradientUnits="userSpaceOnUse" - id="linearGradient40189" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,136.97426,-72.21433)" - gradientUnits="userSpaceOnUse" - id="linearGradient40202" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,136.97426,-72.21433)" - gradientUnits="userSpaceOnUse" - id="linearGradient40295" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="112.03586" - x2="86.00116" - y1="82.75322" - x1="57.347244" - gradientTransform="matrix(0.9998599,0,0,0.9960071,131.027,-79.5885)" - gradientUnits="userSpaceOnUse" - id="linearGradient40297" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="133.4879" - x2="145.20987" - y1="112.43961" - x1="128.09367" - gradientUnits="userSpaceOnUse" - id="linearGradient39261-4-5" - xlink:href="#linearGradient40703-5-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient40703-5-5"> - <stop - id="stop40705-8-2" - offset="0" - style="stop-color:#143564;stop-opacity:1;" /> - <stop - id="stop40707-8-7" - offset="1" - style="stop-color:#c1d7f8;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient38252-9"> - <stop - id="stop38254-3" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop38256-1" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="29.688427" - x2="278.79254" - y1="5.6181068" - x1="256.14325" - gradientTransform="matrix(0.888889,0,0,1,-270.46874,9.59825)" - gradientUnits="userSpaceOnUse" - id="linearGradient40511-7-9-5" - xlink:href="#linearGradient1610-74-9-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-74-9-1"> - <stop - id="stop1611-0-8-7" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-9-3-1" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(-114,-208)" - gradientUnits="userSpaceOnUse" - id="linearGradient40507-4-8-1" - xlink:href="#linearGradient58334-8-6-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient58334-8-6-5"> - <stop - style="stop-color:#ffffff;stop-opacity:0.87628865;" - offset="0.0000000" - id="stop58336-8-9-2" /> - <stop - style="stop-color:#fffffe;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop58338-24-8-7" /> - </linearGradient> - <radialGradient - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.4545454,0.3636364,-0.3862167,0.4827711,-2.5397644,26.345139)" - r="5.5" - fy="32.615383" - fx="-27.749987" - cy="32.615383" - cx="-27.749987" - id="radialGradient40649-2-6-6" - xlink:href="#linearGradient16500-5-6-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient16500-5-6-1" - inkscape:collect="always"> - <stop - id="stop16502-17-2-4" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-11-3-2" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="305" - x2="758" - y1="300.5" - x1="754" - gradientTransform="translate(-784,-271)" - gradientUnits="userSpaceOnUse" - id="linearGradient40502-7-8-3" - xlink:href="#linearGradient16500-5-6-1" - inkscape:collect="always" /> - <linearGradient - y2="122.36016" - x2="134.91479" - y1="111.2683" - x1="125.99933" - gradientUnits="userSpaceOnUse" - id="linearGradient40635-7-2-2" - xlink:href="#linearGradient319-5-6-2" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-5-6-2"> - <stop - id="stop320-761-2-1" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-89-7-6" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="122.36016" - x2="134.91479" - y1="112.53999" - x1="126.72586" - gradientUnits="userSpaceOnUse" - id="linearGradient40637-9-5-8" - xlink:href="#linearGradient319-5-6-2" - inkscape:collect="always" /> - <linearGradient - y2="99.029617" - x2="99.628899" - y1="112.62726" - x1="111.2239" - gradientTransform="translate(19.367382)" - gradientUnits="userSpaceOnUse" - id="linearGradient40639-1-2-1" - xlink:href="#linearGradient13973-3-7-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient13973-3-7-8"> - <stop - id="stop13975-1-8-9" - offset="0" - style="stop-color:#3c4c18;stop-opacity:1;" /> - <stop - id="stop13977-2-0-2" - offset="1" - style="stop-color:#9aff31;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="131.03783" - x2="143.69765" - y1="114.2303" - x1="127.63637" - gradientUnits="userSpaceOnUse" - id="linearGradient40641-9-2-7" - xlink:href="#linearGradient319-5-6-2" - inkscape:collect="always" /> - <linearGradient - y2="29.688427" - x2="278.79254" - y1="5.6181068" - x1="256.14325" - gradientTransform="matrix(0.888889,0,0,1,-270.46874,9.59825)" - gradientUnits="userSpaceOnUse" - id="linearGradient41638-8-6" - xlink:href="#linearGradient1610-74-9-1" - inkscape:collect="always" /> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(-114,-208)" - gradientUnits="userSpaceOnUse" - id="linearGradient41640-2-0" - xlink:href="#linearGradient58334-8-6-5" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="32.615383" - fx="-27.749987" - cy="32.615383" - cx="-27.749987" - gradientTransform="matrix(0.4545454,0.3636364,-0.3862167,0.4827711,-2.5397644,26.345139)" - gradientUnits="userSpaceOnUse" - id="radialGradient41642-5-0" - xlink:href="#linearGradient16500-5-6-1" - inkscape:collect="always" /> - <linearGradient - y2="305" - x2="758" - y1="300.5" - x1="754" - gradientTransform="translate(-784,-271)" - gradientUnits="userSpaceOnUse" - id="linearGradient41644-5-4" - xlink:href="#linearGradient16500-5-6-1" - inkscape:collect="always" /> - <linearGradient - y2="242.22473" - x2="164.0939" - y1="259.745" - x1="188.77448" - gradientTransform="matrix(0.695652,0,0,0.869703,-44.93485,-114.66358)" - gradientUnits="userSpaceOnUse" - id="linearGradient40875-3-9-8" - xlink:href="#linearGradient37542-3-0-7-6" - inkscape:collect="always" /> - <linearGradient - id="linearGradient37542-3-0-7-6"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-1-6-6-5" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-2-1-7-0" /> - </linearGradient> - <linearGradient - y2="-264.875" - x2="-276" - y1="-276.75" - x1="-287.75" - gradientTransform="translate(357.00001,373)" - gradientUnits="userSpaceOnUse" - id="linearGradient40877-5-5-9" - xlink:href="#linearGradient319-34-8-7-0" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-34-8-7-0"> - <stop - id="stop320-11-9-8-0" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-38-3-1-6" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="248.54021" - x2="171.50414" - y1="210.78392" - x1="130.70929" - gradientTransform="matrix(0.608695,0,0,0.760996,-26.1305,-84.76968)" - gradientUnits="userSpaceOnUse" - id="linearGradient40879-9-8-1" - xlink:href="#linearGradient37542-3-0-7-6" - inkscape:collect="always" /> - <linearGradient - y2="-267.26749" - x2="-277.01501" - y1="-272" - x1="-283" - gradientTransform="translate(361.00001,376)" - gradientUnits="userSpaceOnUse" - id="linearGradient40881-8-0-8" - xlink:href="#linearGradient319-34-8-7-0" - inkscape:collect="always" /> - <radialGradient - r="3.9999998" - fy="104.09358" - fx="77.721619" - cy="104.09358" - cx="77.721619" - gradientTransform="matrix(-0.06118084,-0.8594818,2.4629674,-0.1753088,-259.40057,190.15309)" - gradientUnits="userSpaceOnUse" - id="radialGradient40883-4-0-3" - xlink:href="#linearGradient10069-7-6-7-4" - inkscape:collect="always" /> - <linearGradient - id="linearGradient10069-7-6-7-4"> - <stop - id="stop10071-81-3-2-4" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-6-7-5-6" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="242.22473" - x2="164.0939" - y1="259.745" - x1="188.77448" - gradientTransform="matrix(0.695652,0,0,0.869703,-44.93485,-114.66358)" - gradientUnits="userSpaceOnUse" - id="linearGradient39136-2-0" - xlink:href="#linearGradient37542-3-0-7-6" - inkscape:collect="always" /> - <linearGradient - y2="-264.875" - x2="-276" - y1="-276.75" - x1="-287.75" - gradientTransform="translate(357.00001,373)" - gradientUnits="userSpaceOnUse" - id="linearGradient39138-8-6" - xlink:href="#linearGradient319-34-8-7-0" - inkscape:collect="always" /> - <linearGradient - y2="250.6842" - x2="174.35753" - y1="210.78392" - x1="130.70929" - gradientTransform="matrix(0.608695,0,0,0.760996,-26.1305,-84.76968)" - gradientUnits="userSpaceOnUse" - id="linearGradient39140-6-8" - xlink:href="#linearGradient37542-3-0-7-6" - inkscape:collect="always" /> - <linearGradient - y2="-267.26749" - x2="-277.01501" - y1="-272" - x1="-283" - gradientTransform="translate(361.00001,376)" - gradientUnits="userSpaceOnUse" - id="linearGradient39143-0-6" - xlink:href="#linearGradient319-34-8-7-0" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-17-1-6"> - <stop - id="stop320-115-1-5" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-27-3-7" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="129.36641" - x2="275.1503" - y1="99.513062" - x1="255.63673" - gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)" - gradientUnits="userSpaceOnUse" - id="linearGradient40679" - xlink:href="#linearGradient319-17-1-6" - inkscape:collect="always" /> - <linearGradient - y2="116.41341" - x2="267.20212" - y1="129.28557" - x1="280.0918" - gradientTransform="matrix(1,0,0,0.997161,-259.00079,67.35344)" - gradientUnits="userSpaceOnUse" - id="linearGradient40731" - xlink:href="#linearGradient25417" - inkscape:collect="always" /> - <linearGradient - y2="129.36641" - x2="275.1503" - y1="99.513062" - x1="255.63673" - gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)" - gradientUnits="userSpaceOnUse" - id="linearGradient40733" - xlink:href="#linearGradient319-17-1-6" - inkscape:collect="always" /> - <linearGradient - y2="129.36641" - x2="275.1503" - y1="99.513062" - x1="255.63673" - gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)" - gradientUnits="userSpaceOnUse" - id="linearGradient40733-0" - xlink:href="#linearGradient319-17-1-6-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-17-1-6-7"> - <stop - id="stop320-115-1-5-1" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-27-3-7-7" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="129.36641" - x2="275.1503" - y1="99.513062" - x1="255.63673" - gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)" - gradientUnits="userSpaceOnUse" - id="linearGradient40733-03" - xlink:href="#linearGradient319-17-1-6-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-17-1-6-8"> - <stop - id="stop320-115-1-5-0" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-27-3-7-1" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="391.21976" - x2="94.246101" - y1="393.90298" - x1="96.824379" - gradientTransform="translate(254.01612,-211.00101)" - gradientUnits="userSpaceOnUse" - id="linearGradient38478" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <radialGradient - r="1.5" - fy="14.5" - fx="70.5" - cy="14.5" - cx="70.5" - gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)" - gradientUnits="userSpaceOnUse" - id="radialGradient44318" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <radialGradient - r="5.5192375" - fy="14.649424" - fx="70.470596" - cy="14.649424" - cx="70.470596" - gradientTransform="matrix(0.5399935,0.3131662,-0.3907892,0.5793905,38.141764,-16.056748)" - gradientUnits="userSpaceOnUse" - id="radialGradient44320" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="56.357628" - x2="121.22078" - y1="53.227627" - x1="104.90227" - gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)" - gradientUnits="userSpaceOnUse" - id="linearGradient42988" - xlink:href="#linearGradient319-19" - inkscape:collect="always" /> - <linearGradient - y2="341" - x2="-49" - y1="342.0625" - x1="-56.5" - gradientTransform="translate(207,-246.99988)" - gradientUnits="userSpaceOnUse" - id="linearGradient42990" - xlink:href="#linearGradient319-19" - inkscape:collect="always" /> - <linearGradient - y2="118.81034" - x2="132.41052" - y1="113.57294" - x1="126.55782" - gradientUnits="userSpaceOnUse" - id="linearGradient42992" - xlink:href="#linearGradient10069-8-3-3" - inkscape:collect="always" /> - <linearGradient - y2="127.72736" - x2="142.72656" - y1="117.26753" - x1="132" - gradientUnits="userSpaceOnUse" - id="linearGradient42994" - xlink:href="#linearGradient319-95-2-7" - inkscape:collect="always" /> - <linearGradient - y2="542.5" - x2="-110.5" - y1="546.5" - x1="-114.75" - gradientTransform="translate(4.9999967,20)" - gradientUnits="userSpaceOnUse" - id="linearGradient42996" - xlink:href="#linearGradient10069-8-3-3" - inkscape:collect="always" /> - <linearGradient - id="linearGradient44627"> - <stop - id="stop44629" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop44631" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient10069-9-7-4-74"> - <stop - id="stop10071-5-4-5-0" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-43-0-5-9" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient44939-8"> - <stop - id="stop44941-8" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop44943-2" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="106.5" - x2="284.5" - y1="101.5" - x1="279.75" - gradientUnits="userSpaceOnUse" - id="linearGradient44485" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - y2="105.092" - x2="339.125" - y1="106.93575" - x1="351.71875" - gradientTransform="translate(0,-21)" - gradientUnits="userSpaceOnUse" - id="linearGradient44942" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - y2="106.19597" - x2="336.40625" - y1="108.35222" - x1="351.15625" - gradientTransform="rotate(180,349,91.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient44944" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,593.02125,-1.8e-6)" - y2="102" - x2="281.75" - y1="102" - x1="279" - gradientUnits="userSpaceOnUse" - id="linearGradient44950" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(0,1,1,0,225,-182.99437)" - y2="105.5" - x2="283" - y1="101.5" - x1="279.75" - gradientUnits="userSpaceOnUse" - id="linearGradient44954" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - y2="19.9375" - x2="106.125" - y1="10.8125" - x1="115.84575" - gradientTransform="matrix(-1,0,0,1,221,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient45220" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="121.70699" - x2="130.88379" - y1="111.85698" - x1="125.86876" - gradientUnits="userSpaceOnUse" - id="linearGradient45283" - xlink:href="#linearGradient38252-9" - inkscape:collect="always" /> - <linearGradient - y2="117.96092" - x2="132.60205" - y1="122.29202" - x1="134.78751" - gradientUnits="userSpaceOnUse" - id="linearGradient45285" - xlink:href="#linearGradient38252-9" - inkscape:collect="always" /> - <radialGradient - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1.0070601,0.03386866,-0.03770425,1.1211085,20.665977,-85.772965)" - r="5.9852905" - fy="611.10455" - fx="336.42892" - cy="611.10455" - cx="336.42892" - id="radialGradient45309" - xlink:href="#linearGradient10069-9-7-4-74" - inkscape:collect="always" /> - <linearGradient - y2="427" - x2="685.47357" - y1="427" - x1="689.47357" - gradientTransform="matrix(-1,0,0,1,1444.9824,-215)" - gradientUnits="userSpaceOnUse" - id="linearGradient43826" - xlink:href="#linearGradient44627" - inkscape:collect="always" /> - <linearGradient - y2="30.743095" - x2="277.68143" - y1="-4.4418921" - x1="246.89435" - gradientTransform="matrix(0.888889,0,0,1,61.53822,346.48241)" - gradientUnits="userSpaceOnUse" - id="linearGradient43856" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="241" - x1="87.03125" - gradientTransform="translate(218.01612,129)" - gradientUnits="userSpaceOnUse" - id="linearGradient43858" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46780" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient46782" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46784" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient46786" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46818" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient46820" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46822" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient46824" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46990" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient46992" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46994" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient46996" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="585.28772" - x2="159.13864" - y1="601.5" - x1="172.5625" - gradientTransform="matrix(-1,0,0,1,140,-415)" - gradientUnits="userSpaceOnUse" - id="linearGradient46998" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="35.75" - x2="271.98389" - y1="1.5973248" - x1="249.64528" - gradientTransform="matrix(-1,0,0,1,237.98388,150.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient47000" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <radialGradient - r="4.4262571" - fy="375.96332" - fx="412.10059" - cy="375.96332" - cx="412.10059" - gradientTransform="matrix(0.5274943,0,0,0.7696585,194.81546,86.715119)" - gradientUnits="userSpaceOnUse" - id="radialGradient25048" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="375.5058" - x2="410.55432" - y1="373.01221" - x1="408.91928" - gradientUnits="userSpaceOnUse" - id="linearGradient25106" - xlink:href="#linearGradient25108" - inkscape:collect="always" /> - <linearGradient - y2="370.21317" - x2="407.62576" - y1="375.39175" - x1="411.05389" - gradientUnits="userSpaceOnUse" - id="linearGradient25117" - xlink:href="#linearGradient25108" - inkscape:collect="always" /> - <linearGradient - y2="297.92099" - x2="353.72073" - y1="314.11398" - x1="352.98236" - gradientTransform="rotate(-45,343.872,632.75601)" - gradientUnits="userSpaceOnUse" - id="linearGradient25449" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="519.46057" - x2="434.49387" - y1="524.30481" - x1="436.54755" - gradientUnits="userSpaceOnUse" - id="linearGradient25451" - xlink:href="#linearGradient25108" - inkscape:collect="always" /> - <linearGradient - y2="526" - x2="433" - y1="524.97125" - x1="432.0849" - gradientUnits="userSpaceOnUse" - id="linearGradient25453" - xlink:href="#linearGradient25108" - inkscape:collect="always" /> - <radialGradient - r="4.4262571" - fy="370.11554" - fx="410.73904" - cy="370.11554" - cx="410.73904" - gradientTransform="matrix(0.5274943,0,0,0.7696585,194.81546,86.715119)" - gradientUnits="userSpaceOnUse" - id="radialGradient25457" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="105.5" - x2="283" - y1="101.5" - x1="279.75" - gradientTransform="matrix(0,1,1,0,225,-182.99437)" - gradientUnits="userSpaceOnUse" - id="linearGradient23543" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - y2="102" - x2="281.75" - y1="102" - x1="279" - gradientTransform="matrix(0,1,1,0,225,-182.99437)" - gradientUnits="userSpaceOnUse" - id="linearGradient23557" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - y2="109.5" - x2="289.5" - y1="106.5" - x1="292.25" - gradientTransform="matrix(0,1,1,0,225,-182.99437)" - gradientUnits="userSpaceOnUse" - id="linearGradient23559" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="374.42419" - x2="406.7699" - y1="386.45807" - x1="413.9498" - id="linearGradient24341" - xlink:href="#linearGradient24343" - inkscape:collect="always" /> - <linearGradient - y2="374.07153" - x2="413.98795" - y1="367.62839" - x1="403.9577" - gradientUnits="userSpaceOnUse" - id="linearGradient24349" - xlink:href="#linearGradient24343" - inkscape:collect="always" /> - <radialGradient - r="3.8798895" - fy="52.367992" - fx="409.55594" - cy="52.367992" - cx="409.55594" - gradientTransform="matrix(0.6402148,-1.1088846,0.8413297,0.4857498,104.42892,800.46622)" - gradientUnits="userSpaceOnUse" - id="radialGradient24354" - xlink:href="#linearGradient21327-6" - inkscape:collect="always" /> - <linearGradient - y2="81.382545" - x2="257.38638" - y1="68.113258" - x1="270.66064" - gradientUnits="userSpaceOnUse" - id="linearGradient24511" - xlink:href="#linearGradient34157" - inkscape:collect="always" /> - <linearGradient - y2="74.562462" - x2="262.43726" - y1="80.100891" - x1="256.90005" - gradientUnits="userSpaceOnUse" - id="linearGradient24513" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.66806" - fx="75.217888" - cy="500.66806" - cx="75.217888" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient24515" - xlink:href="#linearGradient29149" - inkscape:collect="always" /> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient24517" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="77.962585" - fx="259.02887" - cy="77.962585" - cx="259.02887" - gradientTransform="matrix(0.6691529,0,4.3047361e-8,0.6954014,84.50351,24.951375)" - gradientUnits="userSpaceOnUse" - id="radialGradient24519" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - r="3.5" - fy="77.188034" - fx="259.55096" - cy="77.188034" - cx="259.55096" - gradientTransform="matrix(1.3879142,0,8.9286134e-8,1.4423572,-101.87942,-32.970267)" - gradientUnits="userSpaceOnUse" - id="radialGradient24523" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="726.37006" - x2="1661.8125" - y1="722" - x1="1663.8125" - gradientTransform="translate(-1297,-948)" - gradientUnits="userSpaceOnUse" - id="linearGradient25056" - xlink:href="#linearGradient30208" - inkscape:collect="always" /> - <radialGradient - r="5.5" - fy="722.19189" - fx="1662.2664" - cy="722.19189" - cx="1662.2664" - gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1689.2674,-563.64056)" - gradientUnits="userSpaceOnUse" - id="radialGradient25058" - xlink:href="#linearGradient19425" - inkscape:collect="always" /> - <linearGradient - y2="827.32849" - x2="1979.2772" - y1="827.77124" - x1="1984.3658" - gradientTransform="matrix(0.8167109,0,0,0.8433415,-1256.7473,-918.72044)" - gradientUnits="userSpaceOnUse" - id="linearGradient25060" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="122.92735" - x2="135.00615" - y1="80.045052" - x1="98.858559" - gradientUnits="userSpaceOnUse" - id="linearGradient29407" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="243.31177" - x2="129.24866" - y1="245.03757" - x1="130.75166" - gradientUnits="userSpaceOnUse" - id="linearGradient29409" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="129.82761" - x2="144.22272" - y1="112.31642" - x1="126.37006" - gradientUnits="userSpaceOnUse" - id="linearGradient29411" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient29413" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - id="linearGradient44939-8-7-1-7"> - <stop - id="stop44941-8-4-5-4" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop44943-2-0-2-0" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - gradientTransform="matrix(-1,0,0,1,780.92531,0)" - y2="248.09296" - x2="389.59052" - y1="220.84622" - x1="389.73953" - gradientUnits="userSpaceOnUse" - id="linearGradient37396-1" - xlink:href="#linearGradient37542-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient37542-7"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-40" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-94" /> - </linearGradient> - <linearGradient - gradientTransform="rotate(90,390.49596,244.48989)" - y2="247.99998" - x2="392.0101" - y1="222.99998" - x1="392.0101" - gradientUnits="userSpaceOnUse" - id="linearGradient15742-5" - xlink:href="#linearGradient37542-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient37542-5"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-1" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-71" /> - </linearGradient> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="241.31801" - x2="386.30408" - y1="241.13428" - x1="392.02036" - id="linearGradient27860" - xlink:href="#linearGradient27854" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,782.02022,0)" - y2="249.99998" - x2="392.0101" - y1="224.99998" - x1="392.0101" - gradientUnits="userSpaceOnUse" - id="linearGradient27872" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - gradientTransform="matrix(-1,0,0,1,782.02022,0)" - y2="242.46706" - x2="386.74603" - y1="241.13428" - x1="390.87131" - gradientUnits="userSpaceOnUse" - id="linearGradient27874" - xlink:href="#linearGradient27854" - inkscape:collect="always" /> - <linearGradient - y2="247.99998" - x2="392.0101" - y1="222.99998" - x1="392.0101" - gradientTransform="matrix(0,1,1,0,146.99795,-188.00607)" - gradientUnits="userSpaceOnUse" - id="linearGradient27886" - xlink:href="#linearGradient37542-5" - inkscape:collect="always" /> - <linearGradient - gradientUnits="userSpaceOnUse" - y2="249.54126" - x2="391.17557" - y1="244.85669" - x1="388.70071" - id="linearGradient27902" - xlink:href="#linearGradient27896" - inkscape:collect="always" /> - <linearGradient - id="linearGradient10069-9-71"> - <stop - id="stop10071-5-1" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-43-5" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient23974-2"> - <stop - style="stop-color:#2561b7;stop-opacity:1;" - offset="0" - id="stop23976-2" /> - <stop - style="stop-color:#f9fbff;stop-opacity:1" - offset="1" - id="stop23978-1" /> - </linearGradient> - <linearGradient - y2="253.23859" - x2="-20.826464" - y1="266.11719" - x1="-38.103703" - gradientTransform="matrix(1.4646688,0,0,1.4650206,168.77325,-157.03253)" - gradientUnits="userSpaceOnUse" - id="linearGradient28968" - xlink:href="#linearGradient23974-2" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-5"> - <stop - id="stop320-761" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-8" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="259.87677" - x2="-30.075666" - y1="257.99881" - x1="-26.511335" - gradientTransform="matrix(1.4646688,0,0,1.4650206,168.77325,-157.03253)" - gradientUnits="userSpaceOnUse" - id="linearGradient29424" - xlink:href="#linearGradient37542-7" - inkscape:collect="always" /> - <linearGradient - y2="252.03563" - x2="-23.636715" - y1="271.58572" - x1="-35.153767" - gradientTransform="translate(0,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient29988" - xlink:href="#linearGradient23974" - inkscape:collect="always" /> - <linearGradient - y2="120.28082" - x2="441.93222" - y1="105.28082" - x1="446.93222" - gradientTransform="translate(-113.93222,176.71918)" - gradientUnits="userSpaceOnUse" - id="linearGradient29990" - xlink:href="#linearGradient319-5" - inkscape:collect="always" /> - <linearGradient - y2="118.18078" - x2="131.72171" - y1="111.03492" - x1="123.80045" - gradientUnits="userSpaceOnUse" - id="linearGradient29994" - xlink:href="#linearGradient10069-9-71" - inkscape:collect="always" /> - <linearGradient - y2="118.98331" - x2="132.99687" - y1="111.13178" - x1="124.78239" - gradientUnits="userSpaceOnUse" - id="linearGradient29773-5" - xlink:href="#linearGradient21327-6-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient21327-6-8"> - <stop - id="stop21329-3-4" - offset="0" - style="stop-color:#1e3e70;stop-opacity:1;" /> - <stop - id="stop21331-4-0" - offset="1" - style="stop-color:#1e3e70;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient28526"> - <stop - style="stop-color:#2561b7;stop-opacity:1;" - offset="0" - id="stop28528" /> - <stop - style="stop-color:#f9fbff;stop-opacity:1" - offset="1" - id="stop28530" /> - </linearGradient> - <linearGradient - id="linearGradient319-62"> - <stop - id="stop320-90" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-4" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient1610-52-2"> - <stop - id="stop1611-32-8" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-46-8" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient319-62-8"> - <stop - id="stop320-90-6" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-4-0" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="126.89457" - x2="140.18503" - y1="104.14172" - x1="121.74819" - gradientUnits="userSpaceOnUse" - id="linearGradient29334" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="127.60542" - x2="122.40444" - y1="91.071259" - x1="155.10138" - gradientUnits="userSpaceOnUse" - id="linearGradient29336" - xlink:href="#linearGradient10069" - inkscape:collect="always" /> - <linearGradient - y2="118" - x2="132" - y1="126.19594" - x1="124.66362" - gradientUnits="userSpaceOnUse" - id="linearGradient29338" - xlink:href="#linearGradient24000" - inkscape:collect="always" /> - <linearGradient - y2="116.55647" - x2="133.53401" - y1="126.88889" - x1="124.28249" - gradientUnits="userSpaceOnUse" - id="linearGradient29340" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="119.554" - x2="130.82327" - y1="101.45953" - x1="147.25899" - gradientUnits="userSpaceOnUse" - id="linearGradient29342" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="288.5" - x2="1146.6705" - y1="287.70486" - x1="1138.1963" - gradientTransform="matrix(0,-1,-1,0,449.99999,1678)" - gradientUnits="userSpaceOnUse" - id="linearGradient28574" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="405.3895" - x2="740.30865" - y1="367.52411" - x1="757.2467" - gradientTransform="matrix(0,-1,-1,0,558.99999,1286)" - gradientUnits="userSpaceOnUse" - id="linearGradient28577" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="401.90442" - x2="737.62225" - y1="396.45972" - x1="745.48267" - gradientTransform="matrix(0,-1,-1,0,558.99999,1288)" - gradientUnits="userSpaceOnUse" - id="linearGradient28580" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="400" - x2="752" - y1="402" - x1="743" - gradientTransform="rotate(-90,523.5,762.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient28583" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - gradientTransform="rotate(90,95.49995,479.49996)" - y2="406.47784" - x2="161.83331" - y1="413.87982" - x1="162.41054" - gradientUnits="userSpaceOnUse" - id="linearGradient28589" - xlink:href="#linearGradient38845" - inkscape:collect="always" /> - <linearGradient - y2="423.54419" - x2="744.1059" - y1="396.04428" - x1="743.87036" - gradientTransform="matrix(0,-1,-1,0,558.99999,1288)" - gradientUnits="userSpaceOnUse" - id="linearGradient28593" - xlink:href="#linearGradient38831" - inkscape:collect="always" /> - <linearGradient - y2="569.18829" - x2="163.11441" - y1="544.21143" - x1="148.56801" - gradientTransform="rotate(90,168.49999,551.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient28600" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="291.35333" - x2="1146.2682" - y1="288.19919" - x1="1141.2856" - gradientTransform="matrix(0,-1,-1,0,449.99999,1678)" - gradientUnits="userSpaceOnUse" - id="linearGradient28603" - xlink:href="#linearGradient38831" - inkscape:collect="always" /> - <radialGradient - r="7" - fy="19.425121" - fx="-30.028414" - cy="19.425121" - cx="-30.028414" - gradientTransform="matrix(0.94105289,0.01178942,-0.01073736,0.8570756,238.4669,249.70522)" - gradientUnits="userSpaceOnUse" - id="radialGradient29805" - xlink:href="#linearGradient1610-52-2" - inkscape:collect="always" /> - <linearGradient - y2="248.09296" - x2="389.59052" - y1="220.84622" - x1="389.73953" - gradientTransform="matrix(-1,0,0,1,780.92531,0)" - gradientUnits="userSpaceOnUse" - id="linearGradient29884" - xlink:href="#linearGradient37542-7" - inkscape:collect="always" /> - <linearGradient - y2="244.68996" - x2="386.13718" - y1="243.48854" - x1="391.62881" - gradientUnits="userSpaceOnUse" - id="linearGradient29886" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <radialGradient - gradientUnits="userSpaceOnUse" - fy="64.567902" - fx="20.892099" - r="5.257" - cy="64.567902" - cx="20.892099" - id="radialGradient16142-7"> - <stop - id="stop16144-4" - style="stop-color:#F0F0F0" - offset="0" /> - <stop - id="stop16146-0" - style="stop-color:#474747" - offset="1" /> - </radialGradient> - <linearGradient - id="linearGradient37542-78"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-2" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-78" /> - </linearGradient> - <linearGradient - id="linearGradient9030-2"> - <stop - id="stop9032-0" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop9034-89" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient37542-04-82"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-9-0" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-4-5" /> - </linearGradient> - <linearGradient - id="linearGradient9030-38-2"> - <stop - id="stop9032-6-7" - offset="0" - style="stop-color:white;stop-opacity:1;" /> - <stop - id="stop9034-9-6" - offset="1" - style="stop-color:white;stop-opacity:0;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient30766-8"> - <stop - style="stop-color:#be0000;stop-opacity:1" - offset="0" - id="stop30768-7" /> - <stop - style="stop-color:#ff5108;stop-opacity:1" - offset="1" - id="stop30770-8" /> - </linearGradient> - <linearGradient - id="linearGradient30752-0"> - <stop - id="stop30754-9" - offset="0" - style="stop-color:#0c1b63;stop-opacity:1;" /> - <stop - id="stop30756-5" - offset="1" - style="stop-color:#ffffff;stop-opacity:1" /> - </linearGradient> - <linearGradient - y2="17.82831" - x2="6.9718256" - y1="6.2494373" - x1="18.773417" - gradientTransform="translate(-64,-10)" - gradientUnits="userSpaceOnUse" - id="linearGradient32140" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="244.38875" - x2="401.63013" - y1="244.3396" - x1="385.62408" - gradientTransform="matrix(-0.701513,0.712657,0.712657,0.701513,50.5916,-449.6745)" - gradientUnits="userSpaceOnUse" - id="linearGradient32142" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="20.147326" - x2="46.491322" - y1="5.9830923" - x1="61.032951" - gradientTransform="translate(-65.00001,-10.749995)" - gradientUnits="userSpaceOnUse" - id="linearGradient32144" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="20.110929" - x2="44.509518" - y1="6.0129876" - x1="59.02124" - gradientTransform="matrix(1.199998,0,0,1.199999,-74.19988,-12.499988)" - gradientUnits="userSpaceOnUse" - id="linearGradient32146" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="-31.095215" - x2="53.567928" - y1="-25.553123" - x1="47.348152" - gradientUnits="userSpaceOnUse" - id="linearGradient32148" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="482.27924" - x2="-193.07495" - y1="508.33572" - x1="-176.1799" - gradientUnits="userSpaceOnUse" - id="linearGradient31946" - xlink:href="#radialGradient16142-7" - inkscape:collect="always" /> - <linearGradient - y2="479.30875" - x2="-194.90294" - y1="505.36523" - x1="-178.00789" - gradientUnits="userSpaceOnUse" - id="linearGradient31948" - xlink:href="#radialGradient16142" - inkscape:collect="always" /> - <linearGradient - y2="269.24564" - x2="181.25543" - y1="230.51552" - x1="155.37498" - gradientTransform="matrix(1.043478,0,0,0.956667,-7.152175,20.92167)" - gradientUnits="userSpaceOnUse" - id="linearGradient31950" - xlink:href="#linearGradient37542-78" - inkscape:collect="always" /> - <linearGradient - y2="251.40294" - x2="96" - y1="242.39062" - x1="87.765625" - gradientTransform="translate(81.000002,13.499998)" - gradientUnits="userSpaceOnUse" - id="linearGradient31952" - xlink:href="#linearGradient9030-2" - inkscape:collect="always" /> - <linearGradient - y2="250.87756" - x2="171.77303" - y1="217.28368" - x1="148.47061" - gradientTransform="matrix(1.043478,0,0,0.956667,-354.13606,119.42158)" - gradientUnits="userSpaceOnUse" - id="linearGradient31954" - xlink:href="#linearGradient37542-04-82" - inkscape:collect="always" /> - <linearGradient - y2="345.10736" - x2="-253.90541" - y1="340.81195" - x1="-259.99872" - gradientTransform="translate(81.000002,13.499998)" - gradientUnits="userSpaceOnUse" - id="linearGradient31956" - xlink:href="#linearGradient9030-38-2" - inkscape:collect="always" /> - <linearGradient - y2="261.69635" - x2="170.78137" - y1="252.44223" - x1="167.51979" - gradientTransform="matrix(1.0017964,0,0,0.99629977,-0.31613165,0.94171311)" - gradientUnits="userSpaceOnUse" - id="linearGradient31958" - xlink:href="#linearGradient30766-8" - inkscape:collect="always" /> - <linearGradient - y2="243.80345" - x2="89.889603" - y1="238.21507" - x1="87.473038" - gradientTransform="translate(81.000002,13.499998)" - gradientUnits="userSpaceOnUse" - id="linearGradient31960" - xlink:href="#linearGradient9030-2" - inkscape:collect="always" /> - <linearGradient - y2="239.5473" - x2="168.53265" - y1="244.52007" - x1="168.53265" - gradientTransform="translate(0,10)" - gradientUnits="userSpaceOnUse" - id="linearGradient31962" - xlink:href="#linearGradient30752-0" - inkscape:collect="always" /> - <linearGradient - y2="28.583914" - x2="275.43362" - y1="19.495501" - x1="263.35254" - gradientTransform="translate(-237.5,45.5045)" - gradientUnits="userSpaceOnUse" - id="linearGradient31964" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="36.874088" - x2="283.37738" - y1="22.713789" - x1="271.69839" - gradientTransform="translate(-238,44.0045)" - gradientUnits="userSpaceOnUse" - id="linearGradient31966" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="28.583914" - x2="275.43362" - y1="11.017987" - x1="260.25369" - gradientTransform="translate(-243.5,51.5045)" - gradientUnits="userSpaceOnUse" - id="linearGradient31968" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="36.874088" - x2="283.37738" - y1="22.713789" - x1="271.69839" - gradientTransform="translate(-244,50.0045)" - gradientUnits="userSpaceOnUse" - id="linearGradient31970" - xlink:href="#linearGradient37542" - inkscape:collect="always" /> - <linearGradient - y2="242.99191" - x2="90.563423" - y1="239.5473" - x1="85.853188" - gradientTransform="translate(-57.00003,-165.99191)" - gradientUnits="userSpaceOnUse" - id="linearGradient31972" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="245.625" - x2="92.8125" - y1="240.90625" - x1="88" - gradientTransform="translate(-51,-172)" - gradientUnits="userSpaceOnUse" - id="linearGradient31974" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="66.235535" - x2="-183.03308" - y1="66.323799" - x1="-175.72238" - gradientTransform="translate(423,225)" - gradientUnits="userSpaceOnUse" - id="linearGradient32236" - xlink:href="#linearGradient28526" - inkscape:collect="always" /> - <linearGradient - y2="65.917358" - x2="-183.58472" - y1="66.654762" - x1="-174.51762" - gradientTransform="translate(423,225)" - gradientUnits="userSpaceOnUse" - id="linearGradient32238" - xlink:href="#linearGradient20055-8-4" - inkscape:collect="always" /> - <linearGradient - y2="62.182106" - x2="-169.07387" - y1="63.445515" - x1="-180.7581" - gradientTransform="matrix(0.9098462,0,0,0.9414558,406.86085,228.58514)" - gradientUnits="userSpaceOnUse" - id="linearGradient32240" - xlink:href="#linearGradient319-62" - inkscape:collect="always" /> - <linearGradient - y2="-15.138513" - x2="-96.861107" - y1="-16" - x1="-101" - gradientTransform="matrix(1.2857143,0,0,0.787037,371.28571,304.80092)" - gradientUnits="userSpaceOnUse" - id="linearGradient32242" - xlink:href="#linearGradient319-62-8" - inkscape:collect="always" /> - <linearGradient - y2="-15.562586" - x2="-96.705353" - y1="-16" - x1="-101" - gradientTransform="matrix(1.2857143,0,0,0.787037,371.28571,304.80092)" - gradientUnits="userSpaceOnUse" - id="linearGradient32244" - xlink:href="#linearGradient319-62-8" - inkscape:collect="always" /> - <linearGradient - y2="291.5" - x2="244.75" - y1="291.5047" - x1="242.99834" - gradientUnits="userSpaceOnUse" - id="linearGradient32246" - xlink:href="#linearGradient29312" - inkscape:collect="always" /> - <linearGradient - y2="294.5" - x2="243.5" - y1="294.49902" - x1="245.20622" - gradientUnits="userSpaceOnUse" - id="linearGradient32248" - xlink:href="#linearGradient29304" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="273" - y1="388" - x1="258" - gradientTransform="translate(-52.983883,-129)" - gradientUnits="userSpaceOnUse" - id="linearGradient32296" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="273" - y1="388" - x1="259.75" - gradientTransform="translate(-48.983883,-126)" - gradientUnits="userSpaceOnUse" - id="linearGradient32299" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="388" - x2="272" - y1="388" - x1="257.75" - gradientTransform="translate(-47.000005,-120)" - gradientUnits="userSpaceOnUse" - id="linearGradient32301" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="94.239906" - x2="68.0271" - y1="108.47212" - x1="80.60067" - gradientTransform="matrix(0.9166695,0,0,0.9203753,-9.025729,344.78566)" - gradientUnits="userSpaceOnUse" - id="linearGradient32303" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="116.62141" - x2="88.785263" - y1="95.337166" - x1="68.361542" - gradientTransform="translate(-14.983875,337)" - gradientUnits="userSpaceOnUse" - id="linearGradient32305" - xlink:href="#linearGradient13938" - inkscape:collect="always" /> - <linearGradient - y2="108.06429" - x2="81.383331" - y1="84.330009" - x1="58.761654" - gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)" - gradientUnits="userSpaceOnUse" - id="linearGradient32307" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.47867" - x2="137.5759" - y1="100.93772" - x1="114.15679" - gradientUnits="userSpaceOnUse" - id="linearGradient32353" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="125.82862" - x2="140.19273" - y1="118" - x1="131.12576" - gradientUnits="userSpaceOnUse" - id="linearGradient32355" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="429.53806" - x2="322.08145" - y1="408.49368" - x1="299.70026" - gradientTransform="matrix(0.9050931,-7.9558708e-4,0.00612764,0.9147058,39.488451,313.56226)" - gradientUnits="userSpaceOnUse" - id="linearGradient32357" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="125.82862" - x2="140.19273" - y1="118" - x1="131.12576" - gradientUnits="userSpaceOnUse" - id="linearGradient32359" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="124.47867" - x2="137.5759" - y1="100.93772" - x1="114.15679" - gradientUnits="userSpaceOnUse" - id="linearGradient32426" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="125.82862" - x2="140.19273" - y1="118" - x1="131.12576" - gradientUnits="userSpaceOnUse" - id="linearGradient32428" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="226.33672" - x2="174.75458" - y1="244.14676" - x1="190.68166" - gradientUnits="userSpaceOnUse" - id="linearGradient32430" - xlink:href="#linearGradient9030" - inkscape:collect="always" /> - <linearGradient - y2="429.53806" - x2="322.08145" - y1="408.49368" - x1="299.70026" - gradientTransform="matrix(0.77915445,-6.9426235e-4,0.00527501,0.79821029,158.94945,341.39422)" - gradientUnits="userSpaceOnUse" - id="linearGradient32432" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="123.5" - x2="368" - y1="128.5" - x1="346" - gradientTransform="matrix(1,0,0,-1,73,792.5)" - gradientUnits="userSpaceOnUse" - id="linearGradient32434" - xlink:href="#linearGradient44939-8-7-1-7" - inkscape:collect="always" /> - <linearGradient - y2="113.09817" - x2="85.347076" - y1="100.22395" - x1="85.548706" - gradientTransform="rotate(-45,271.82331,-251.06972)" - gradientUnits="userSpaceOnUse" - id="linearGradient31019" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="113.09817" - x2="85.347076" - y1="100.22395" - x1="85.548706" - gradientTransform="matrix(0.72300056,-0.72300056,0.72300056,0.72300056,254.24127,118.38327)" - gradientUnits="userSpaceOnUse" - id="linearGradient31025" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="113.09817" - x2="85.347076" - y1="100.22395" - x1="85.548706" - gradientTransform="rotate(-45,271.82331,-251.06972)" - gradientUnits="userSpaceOnUse" - id="linearGradient31055" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="113.09817" - x2="85.347076" - y1="100.22395" - x1="85.548706" - gradientTransform="matrix(0.72300056,-0.72300056,0.72300056,0.72300056,254.24127,118.38327)" - gradientUnits="userSpaceOnUse" - id="linearGradient31057" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="113.09817" - x2="85.347076" - y1="100.22395" - x1="85.548706" - gradientTransform="rotate(-45,271.82331,-251.06972)" - gradientUnits="userSpaceOnUse" - id="linearGradient31151" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="122.23821" - x2="84.95932" - y1="100.22395" - x1="85.548706" - gradientTransform="matrix(0.72300056,-0.72300056,0.72300056,0.72300056,254.24127,118.38327)" - gradientUnits="userSpaceOnUse" - id="linearGradient31153" - xlink:href="#linearGradient319" - inkscape:collect="always" /> - <linearGradient - y2="105.88815" - x2="85.60022" - y1="99.348953" - x1="85.861206" - gradientTransform="rotate(-45,271.82329,-251.06967)" - gradientUnits="userSpaceOnUse" - id="linearGradient31155" - xlink:href="#linearGradient30958" - inkscape:collect="always" /> - <linearGradient - y2="105.88815" - x2="85.60022" - y1="99.348953" - x1="85.861206" - gradientTransform="matrix(0.74301467,-0.74301467,0.74301467,0.74301467,250.58064,118.02214)" - gradientUnits="userSpaceOnUse" - id="linearGradient31157" - xlink:href="#linearGradient30958" - inkscape:collect="always" /> - <linearGradient - y2="247.32738" - x2="273.85818" - y1="233.0448" - x1="262.04343" - gradientTransform="matrix(-1.1666676,0,0,-1.1666676,119.15081,827.66691)" - gradientUnits="userSpaceOnUse" - id="linearGradient32854-6-2" - xlink:href="#linearGradient37542-7409-7-7-19-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient37542-7409-7-7-19-1"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-48-6-1-8-9" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-82-1-0-6-8" /> - </linearGradient> - <linearGradient - y2="35.759052" - x2="94.157646" - y1="39.47208" - x1="97.616623" - gradientTransform="matrix(0.53706486,0,0,0.53706486,-249.10439,522.04547)" - gradientUnits="userSpaceOnUse" - id="linearGradient32856-3-2" - xlink:href="#linearGradient44939-8-4-7-8-3-0-3" - inkscape:collect="always" /> - <linearGradient - id="linearGradient44939-8-4-7-8-3-0-3"> - <stop - id="stop44941-8-5-40-2-4-2-4" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop44943-2-5-9-4-9-8-0" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="35.759052" - x2="94.157646" - y1="39.47208" - x1="97.616623" - gradientTransform="matrix(0.53706486,0,0,0.53706486,144.9138,-563.9364)" - gradientUnits="userSpaceOnUse" - id="linearGradient32858-7-2" - xlink:href="#linearGradient10069-9-7-5-4-6-5-0-3" - inkscape:collect="always" /> - <linearGradient - id="linearGradient10069-9-7-5-4-6-5-0-3"> - <stop - id="stop10071-5-4-58-5-9-1-2-1" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop10073-43-0-4-0-8-0-4-9" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="8" - fy="462.0358" - fx="-302.79681" - cy="462.0358" - cx="-302.79681" - gradientTransform="matrix(0.39420438,-0.08239205,0.27256031,1.3040635,-361.27885,-161.73915)" - gradientUnits="userSpaceOnUse" - id="radialGradient52641-2-8" - xlink:href="#linearGradient37542-7409-7-7-0-9-9" - inkscape:collect="always" /> - <linearGradient - id="linearGradient37542-7409-7-7-0-9-9"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop37544-48-6-1-4-1-1" /> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="1" - id="stop37546-82-1-0-9-3-3" /> - </linearGradient> - <linearGradient - y2="463.92236" - x2="-303.00003" - y1="475" - x1="-307" - gradientTransform="translate(-42)" - gradientUnits="userSpaceOnUse" - id="linearGradient52998-5-5" - xlink:href="#linearGradient319-31-8-9-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient319-31-8-9-1"> - <stop - id="stop320-23-2-8-4" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop321-34-4-4-2" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <radialGradient - r="8" - fy="462.0358" - fx="-302.79681" - cy="462.0358" - cx="-302.79681" - gradientTransform="matrix(0.39420438,-0.08239205,0.27256031,1.3040635,-362.22886,-161.73912)" - gradientUnits="userSpaceOnUse" - id="radialGradient52883-6-8" - xlink:href="#linearGradient37542-7409-7-7-0-9-9" - inkscape:collect="always" /> - <linearGradient - y2="464.93286" - x2="-304.76843" - y1="476.0105" - x1="-308.7684" - gradientTransform="translate(-42)" - gradientUnits="userSpaceOnUse" - id="linearGradient53000-3-9" - xlink:href="#linearGradient319-31-8-9-1" - inkscape:collect="always" /> - <linearGradient - y2="-102.52942" - x2="470.7515" - y1="-101.22778" - x1="469.49295" - gradientTransform="translate(-839.95,-273.25)" - gradientUnits="userSpaceOnUse" - id="linearGradient53002-6-2" - xlink:href="#linearGradient34488-1-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient34488-1-8"> - <stop - id="stop34490-0-5-7" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop34492-4-0" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="623.21643" - x2="-213.69197" - y1="626.39844" - x1="-217.1391" - gradientUnits="userSpaceOnUse" - id="linearGradient32896-0-4" - xlink:href="#linearGradient32877-9-6-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient32877-9-6-8"> - <stop - id="stop32879-8-1-1" - offset="0" - style="stop-color:#b3b3b3;stop-opacity:1;" /> - <stop - id="stop32881-4-3-9" - offset="1" - style="stop-color:#ffffff;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="653.27765" - x2="-177.70576" - y1="650.94128" - x1="-180.37465" - gradientUnits="userSpaceOnUse" - id="linearGradient32899-8-3" - xlink:href="#linearGradient33058-4-9-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient33058-4-9-5"> - <stop - id="stop33060-3-3-9" - offset="0" - style="stop-color:#e5250b;stop-opacity:1;" /> - <stop - id="stop33062-9-4-7" - offset="1" - style="stop-color:#460000;stop-opacity:1;" /> - </linearGradient> - <radialGradient - r="7.03125" - fy="630.61389" - fx="-197.66467" - cy="630.61389" - cx="-197.66467" - gradientTransform="matrix(1.1748275,-1.7208853,0.51495275,0.35155123,-289.20197,69.961171)" - gradientUnits="userSpaceOnUse" - id="radialGradient32901-4-9" - xlink:href="#linearGradient44939-8-4-8-6-8" - inkscape:collect="always" /> - <linearGradient - id="linearGradient44939-8-4-8-6-8"> - <stop - id="stop44941-8-5-0-0-0" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop44943-2-5-8-6-1" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="628.46533" - x2="-215.31401" - y1="624.84143" - x1="-218.31921" - gradientUnits="userSpaceOnUse" - id="linearGradient32903-6-4" - xlink:href="#linearGradient33058-2-7-1-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient33058-2-7-1-7"> - <stop - id="stop33060-1-8-8-5" - offset="0" - style="stop-color:#e5250b;stop-opacity:1;" /> - <stop - id="stop33062-4-3-4-5" - offset="1" - style="stop-color:#460000;stop-opacity:1;" /> - </linearGradient> - <radialGradient - r="7.03125" - fy="627" - fx="-202.18748" - cy="627" - cx="-202.18748" - gradientTransform="matrix(0.62164476,0.39733376,-0.55111069,0.86222272,269.0477,166.72227)" - gradientUnits="userSpaceOnUse" - id="radialGradient32905-9-5" - xlink:href="#linearGradient44939-8-4-8-6-8" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient34488-1-8" - id="linearGradient58927" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(-829.95,-273.25)" - x1="469.52335" - y1="-101.3037" - x2="470.73633" - y2="-102.52942" /> - <linearGradient - id="linearGradient1610-71-6-9-7"> - <stop - id="stop1611-26-8-5-4" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-04-8-8-0" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient5060-6-6-2-4"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop5062-2-0-5-5" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop5064-4-4-5-5" /> - </linearGradient> - <linearGradient - id="linearGradient4671-6-4-1-7"> - <stop - style="stop-color:#ffd43b;stop-opacity:1;" - offset="0" - id="stop4673-7-6-4-1" /> - <stop - style="stop-color:#ffe873;stop-opacity:1" - offset="1" - id="stop4675-8-0-8-1" /> - </linearGradient> - <linearGradient - id="linearGradient4689-1-6-4-2"> - <stop - style="stop-color:#5a9fd4;stop-opacity:1;" - offset="0" - id="stop4691-6-2-6-7" /> - <stop - style="stop-color:#306998;stop-opacity:1;" - offset="1" - id="stop4693-0-4-8-6" /> - </linearGradient> - <linearGradient - y2="601.36218" - x2="218.99957" - y1="592.95746" - x1="215.99414" - gradientUnits="userSpaceOnUse" - id="linearGradient47921-1-7-1-1" - xlink:href="#linearGradient3944-4-6-7-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3944-4-6-7-7" - inkscape:collect="always"> - <stop - id="stop3946-2-4-4-4" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3948-3-5-0-0" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="604.375" - x2="216.00003" - y1="597.41553" - x1="213.00005" - gradientUnits="userSpaceOnUse" - id="linearGradient47923-2-8-9-9" - xlink:href="#linearGradient3952-2-6-4-4" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3952-2-6-4-4" - inkscape:collect="always"> - <stop - id="stop3954-1-1-8-8" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3956-6-5-8-8" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="606.11218" - x2="219.5" - y1="601.83856" - x1="218.06126" - gradientUnits="userSpaceOnUse" - id="linearGradient47925-8-5-2-2" - xlink:href="#linearGradient3966-5-1-45-4" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3966-5-1-45-4" - inkscape:collect="always"> - <stop - id="stop3968-7-9-5-5" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3970-6-6-1-5" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3966-5-1-45-4" - id="linearGradient49198-1-1" - gradientUnits="userSpaceOnUse" - x1="219" - y1="604.31494" - x2="221" - y2="609.36218" /> - <linearGradient - y2="29.679312" - x2="278.40161" - y1="3.6831069" - x1="253.78497" - gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)" - gradientUnits="userSpaceOnUse" - id="linearGradient59244-7" - xlink:href="#linearGradient1610-1-1-9-4-7-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-1-1-9-4-7-1"> - <stop - id="stop1611-74-7-2-2-2-1" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-09-4-7-5-1-5" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <radialGradient - r="6.9000001" - fy="206.40076" - fx="756.83508" - cy="206.40076" - cx="756.83508" - gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)" - gradientUnits="userSpaceOnUse" - id="radialGradient59246-2" - xlink:href="#linearGradient40578-4-8-4-0-5-2-4-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient40578-4-8-4-0-5-2-4-7"> - <stop - id="stop40580-8-9-8-9-4-6-9-6" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop40582-6-8-8-4-3-8-9-1" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="249" - x2="93.0625" - y1="241.125" - x1="87" - gradientTransform="translate(670,-33)" - gradientUnits="userSpaceOnUse" - id="linearGradient59248-4" - xlink:href="#linearGradient58334-24-8-2-6-0-2" - inkscape:collect="always" /> - <linearGradient - id="linearGradient58334-24-8-2-6-0-2"> - <stop - style="stop-color:#ffffff;stop-opacity:0.87628865;" - offset="0.0000000" - id="stop58336-55-8-3-6-3-3" /> - <stop - style="stop-color:#fffffe;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop58338-17-2-3-3-0-2" /> - </linearGradient> - <linearGradient - y2="305" - x2="758" - y1="300.83292" - x1="754.28558" - gradientTransform="translate(0,-95.999998)" - gradientUnits="userSpaceOnUse" - id="linearGradient59250-2" - xlink:href="#linearGradient16500-11-1-4-3-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient16500-11-1-4-3-1" - inkscape:collect="always"> - <stop - id="stop16502-5-1-5-5-6" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop16504-27-3-6-0-8" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="601.36218" - x2="218.99957" - y1="592.95746" - x1="215.99414" - gradientTransform="translate(-251,440.9872)" - gradientUnits="userSpaceOnUse" - id="linearGradient59252-5" - xlink:href="#linearGradient3944-1-7-5-7-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3944-1-7-5-7-7" - inkscape:collect="always"> - <stop - id="stop3946-7-4-3-6-6" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3948-1-2-5-7-1" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="604.375" - x2="216.00003" - y1="597.41553" - x1="213.00005" - gradientTransform="translate(-251,440.9872)" - gradientUnits="userSpaceOnUse" - id="linearGradient59254-8" - xlink:href="#linearGradient3952-5-7-6-8-9" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3952-5-7-6-8-9" - inkscape:collect="always"> - <stop - id="stop3954-2-9-1-3-2" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3956-7-3-4-6-7" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="606.11218" - x2="219.5" - y1="601.83856" - x1="218.06126" - gradientTransform="translate(-251,440.9872)" - gradientUnits="userSpaceOnUse" - id="linearGradient59256-9" - xlink:href="#linearGradient3966-8-9-6-4-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3966-8-9-6-4-5" - inkscape:collect="always"> - <stop - id="stop3968-2-8-2-4-4" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3970-4-6-6-1-3" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="609.36218" - x2="221" - y1="604.31494" - x1="219" - gradientTransform="translate(-251,440.9872)" - gradientUnits="userSpaceOnUse" - id="linearGradient59258-1" - xlink:href="#linearGradient3966-8-9-6-4-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-2"> - <stop - id="stop1611-8" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0.5" - id="stop6596" /> - <stop - id="stop1612-0" - offset="1" - style="stop-color:#c8c8c8;stop-opacity:1;" /> - </linearGradient> - <linearGradient - id="linearGradient5060-4"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop5062-1" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop5064-6" /> - </linearGradient> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient21442-6" - xlink:href="#linearGradient18821-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient18821-1"> - <stop - id="stop18823-6" - offset="0" - style="stop-color:#fc6b58;stop-opacity:1;" /> - <stop - id="stop18825-0" - offset="1" - style="stop-color:#fc6b58;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="34.375" - x2="29.875" - y1="18.875" - x1="31.1875" - gradientUnits="userSpaceOnUse" - id="linearGradient21444-0" - xlink:href="#linearGradient39155-0" - inkscape:collect="always" /> - <linearGradient - id="linearGradient39155-0"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop39157-6" /> - <stop - style="stop-color:#dadada;stop-opacity:1;" - offset="1" - id="stop39159-6" /> - </linearGradient> - <linearGradient - y2="-458.05771" - x2="190.46461" - y1="193.33229" - x1="185.9903" - gradientTransform="matrix(0.06818845,0,0,0.06818845,22.51112,27.02885)" - gradientUnits="userSpaceOnUse" - id="linearGradient21446-3" - xlink:href="#linearGradient3564-2" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3564-2"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop3566-3" /> - <stop - style="stop-color:white;stop-opacity:0;" - offset="1" - id="stop3568-0" /> - </linearGradient> - <radialGradient - r="20.278975" - fy="19.668886" - fx="26.109201" - cy="19.668886" - cx="26.109201" - gradientTransform="matrix(1.647222,0,0,1.26792,-15.47413,-5.79794)" - gradientUnits="userSpaceOnUse" - id="radialGradient21448-8" - xlink:href="#linearGradient39171-9" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient39171-9"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop39173-1" /> - <stop - style="stop-color:white;stop-opacity:0;" - offset="1" - id="stop39175-1" /> - </linearGradient> - <linearGradient - id="linearGradient18821-1-16"> - <stop - id="stop20589" - offset="0" - style="stop-color:#e3604f;stop-opacity:1;" /> - <stop - id="stop20591" - offset="1" - style="stop-color:#e3604f;stop-opacity:0;" /> - </linearGradient> - <linearGradient - id="linearGradient39155-0-813"> - <stop - style="stop-color:#e6e6e6;stop-opacity:1;" - offset="0" - id="stop20595" /> - <stop - style="stop-color:#c4c4c4;stop-opacity:1;" - offset="1" - id="stop20597" /> - </linearGradient> - <linearGradient - y2="32.076183" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-611.42653,418.58071)" - gradientUnits="userSpaceOnUse" - id="linearGradient22274-1" - xlink:href="#linearGradient1610-7" - inkscape:collect="always" /> - <linearGradient - id="linearGradient1610-7"> - <stop - id="stop1611-4" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop1612-09" - offset="1" - style="stop-color:white;stop-opacity:1;" /> - </linearGradient> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-122.35565,97.287995)" - gradientUnits="userSpaceOnUse" - id="linearGradient22276-4" - xlink:href="#linearGradient5060-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient5060-5"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop5062-5" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop5064-17" /> - </linearGradient> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,484.80188,-124.14103)" - gradientUnits="userSpaceOnUse" - id="radialGradient21442-1" - xlink:href="#linearGradient18821-15" - inkscape:collect="always" /> - <linearGradient - id="linearGradient18821-15"> - <stop - id="stop18823-2" - offset="0" - style="stop-color:#fc6b58;stop-opacity:1;" /> - <stop - id="stop18825-7" - offset="1" - style="stop-color:#fc6b58;stop-opacity:0;" /> - </linearGradient> - <linearGradient - gradientTransform="translate(-173.83762,79.554258)" - y2="34.375" - x2="29.875" - y1="18.875" - x1="31.1875" - gradientUnits="userSpaceOnUse" - id="linearGradient21444-6" - xlink:href="#linearGradient39155-1" - inkscape:collect="always" /> - <linearGradient - id="linearGradient39155-1"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop39157-4" /> - <stop - style="stop-color:#dadada;stop-opacity:1;" - offset="1" - id="stop39159-2" /> - </linearGradient> - <linearGradient - y2="-458.05771" - x2="190.46461" - y1="193.33229" - x1="185.9903" - gradientTransform="matrix(0.06818845,0,0,0.06818845,-116.87526,94.420283)" - gradientUnits="userSpaceOnUse" - id="linearGradient21446-32" - xlink:href="#linearGradient3564-21" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3564-21"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop3566-6" /> - <stop - style="stop-color:white;stop-opacity:0;" - offset="1" - id="stop3568-8" /> - </linearGradient> - <radialGradient - r="20.278975" - fy="19.668886" - fx="26.109201" - cy="19.668886" - cx="26.109201" - gradientTransform="matrix(1.647222,0,0,1.26792,-154.86051,61.593483)" - gradientUnits="userSpaceOnUse" - id="radialGradient21448-5" - xlink:href="#linearGradient39171-7" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient39171-7"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop39173-6" /> - <stop - style="stop-color:white;stop-opacity:0;" - offset="1" - id="stop39175-18" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient37667" - id="linearGradient13927" - gradientUnits="userSpaceOnUse" - x1="804.17645" - y1="-262.1517" - x2="832.15369" - y2="-234.17448" /> </defs> <path inkscape:connector-curvature="0" @@ -16726,21 +219,21 @@ <g inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" style="opacity:0.45" transform="matrix(1.045454,0,0,1.0610941,-16.32706,109.05266)" id="g16397" /> <g inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" transform="matrix(1.000037,0,0,1.0187902,152.96764,39.785579)" id="g16403"> <g style="display:inline" id="g16405" transform="matrix(0.9375,0,0,0.9375,192.125,77.25821)" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" + inkscape:export-filename="prvicons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> <g @@ -16776,7 +269,7 @@ <g inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" transform="matrix(1.000872,0,0,1.0462972,140.88404,50.499099)" id="g16425" /> <g @@ -16895,7 +388,7 @@ style="display:inline" inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" transform="translate(67,200.06499)" id="g22051" /> <g @@ -16916,7 +409,7 @@ style="display:inline;fill:#d45500;fill-opacity:1" /> <g id="g28643" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" transform="translate(-323.1613,214)" @@ -16934,14 +427,14 @@ <g inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" id="g33443" style="fill:#000000;fill-opacity:1" transform="matrix(-0.767131,0,0,0.788662,369.34347,270.08667)" /> <g inkscape:export-ydpi="90" inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" id="g33445" transform="matrix(-0.693332,0,0,0.663699,372.90657,295.34421)" /> <g @@ -16954,7 +447,7 @@ id="g77742" /> <g id="g34782" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" + inkscape:export-filename="prvicons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" transform="rotate(180,52.08065,131.5)" @@ -17017,7 +510,7 @@ style="display:inline;stroke-width:5.41920376;stroke-miterlimit:4;stroke-dasharray:none" id="g38570" transform="matrix(0.5478212,-0.56064,0.5419177,0.5545983,197.19518,557.21673)" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" + inkscape:export-filename="prvicons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> <g @@ -17036,11 +529,10 @@ style="display:inline;enable-background:new" id="g72880" /> <image - sodipodi:absref="C:\Users\Andrzej Ambroż\Desktop\a230341b4bf9a9d653c3e8062c4702e859d6d32f.png" + sodipodi:absref="prvicons.png" y="143.4964" x="8460.25" id="image7203" - xlink:href="file:///C:/Users/Andrzej%20Ambro%C5%BC/Desktop/a230341b4bf9a9d653c3e8062c4702e859d6d32f.png" style="stroke-width:0.69403505;image-rendering:optimizeSpeed" preserveAspectRatio="none" height="487.00717" diff --git a/release/scripts/startup/bl_operators/clip.py b/release/scripts/startup/bl_operators/clip.py index 45d1ea98a8a..f0e099244f4 100644 --- a/release/scripts/startup/bl_operators/clip.py +++ b/release/scripts/startup/bl_operators/clip.py @@ -949,7 +949,7 @@ class CLIP_OT_setup_tracking_scene(Operator): """Make all the newly created and the old objects of a collection """ \ """to be properly setup for shadow catch""" for ob in collection.objects: - ob.cycles.is_shadow_catcher = True + ob.is_shadow_catcher = True for child in collection.children: setup_shadow_catcher_objects(child) diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index cd67a41a701..f6ca200f570 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -501,6 +501,7 @@ compositor_node_categories = [ NodeItem("CompositorNodeTexture"), NodeItem("CompositorNodeBokehImage"), NodeItem("CompositorNodeTime"), + NodeItem("CompositorNodeSceneTime"), NodeItem("CompositorNodeTrackPos"), ]), CompositorNodeCategory("CMP_OUTPUT", "Output", items=[ diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index 76a6135baaf..169107b19cb 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -122,7 +122,7 @@ void BLF_draw(int fontid, const char *str, size_t str_len) ATTR_NONNULL(2); int BLF_draw_mono(int fontid, const char *str, size_t str_len, int cwidth) ATTR_NONNULL(2); typedef bool (*BLF_GlyphBoundsFn)(const char *str, - const size_t str_step_ofs, + size_t str_step_ofs, const struct rcti *glyph_step_bounds, int glyph_advance_x, const struct rctf *glyph_bounds, diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h index 23e42ec777f..4e36f522981 100644 --- a/source/blender/blenfont/intern/blf_internal.h +++ b/source/blender/blenfont/intern/blf_internal.h @@ -121,7 +121,7 @@ void blf_font_boundbox_foreach_glyph(struct FontBLF *font, const char *str, size_t str_len, bool (*user_fn)(const char *str, - const size_t str_step_ofs, + size_t str_step_ofs, const struct rcti *glyph_step_bounds, int glyph_advance_x, const struct rctf *glyph_bounds, @@ -132,7 +132,7 @@ void blf_font_boundbox_foreach_glyph(struct FontBLF *font, int blf_font_count_missing_chars(struct FontBLF *font, const char *str, - const size_t str_len, + size_t str_len, int *r_tot_chars); void blf_font_free(struct FontBLF *font); diff --git a/source/blender/blenkernel/BKE_appdir.h b/source/blender/blenkernel/BKE_appdir.h index e92909fb3ca..a7baaed141f 100644 --- a/source/blender/blenkernel/BKE_appdir.h +++ b/source/blender/blenkernel/BKE_appdir.h @@ -140,7 +140,7 @@ bool BKE_appdir_font_folder_default(char *dir); * Find Python executable. */ bool BKE_appdir_program_python_search(char *fullpath, - const size_t fullpath_len, + size_t fullpath_len, int version_major, int version_minor); diff --git a/source/blender/blenkernel/BKE_attribute.h b/source/blender/blenkernel/BKE_attribute.h index db8f3759bf8..6020da08f51 100644 --- a/source/blender/blenkernel/BKE_attribute.h +++ b/source/blender/blenkernel/BKE_attribute.h @@ -73,7 +73,7 @@ bool BKE_id_attribute_rename(struct ID *id, const char *new_name, struct ReportList *reports); -int BKE_id_attributes_length(struct ID *id, const CustomDataMask mask); +int BKE_id_attributes_length(struct ID *id, CustomDataMask mask); struct CustomDataLayer *BKE_id_attributes_active_get(struct ID *id); void BKE_id_attributes_active_set(struct ID *id, struct CustomDataLayer *layer); diff --git a/source/blender/blenkernel/BKE_attribute_access.hh b/source/blender/blenkernel/BKE_attribute_access.hh index f69ba79e23f..3ffdcee05eb 100644 --- a/source/blender/blenkernel/BKE_attribute_access.hh +++ b/source/blender/blenkernel/BKE_attribute_access.hh @@ -26,9 +26,8 @@ #include "BKE_attribute.h" #include "BLI_color.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_function_ref.hh" +#include "BLI_math_vec_types.hh" /** * This file defines classes that help to provide access to attribute data on a #GeometryComponent. diff --git a/source/blender/blenkernel/BKE_attribute_math.hh b/source/blender/blenkernel/BKE_attribute_math.hh index 802c744972c..a7bdca06790 100644 --- a/source/blender/blenkernel/BKE_attribute_math.hh +++ b/source/blender/blenkernel/BKE_attribute_math.hh @@ -18,8 +18,7 @@ #include "BLI_array.hh" #include "BLI_color.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "DNA_customdata_types.h" @@ -160,12 +159,12 @@ template<> inline float mix2(const float factor, const float &a, const float &b) template<> inline float2 mix2(const float factor, const float2 &a, const float2 &b) { - return float2::interpolate(a, b, factor); + return math::interpolate(a, b, factor); } template<> inline float3 mix2(const float factor, const float3 &a, const float3 &b) { - return float3::interpolate(a, b, factor); + return math::interpolate(a, b, factor); } template<> diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h index 88d97b822ce..c454e441551 100644 --- a/source/blender/blenkernel/BKE_bvhutils.h +++ b/source/blender/blenkernel/BKE_bvhutils.h @@ -129,7 +129,7 @@ BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -149,7 +149,7 @@ BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -166,7 +166,7 @@ BVHTree *bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -189,7 +189,7 @@ BVHTree *bvhtree_from_mesh_edges_ex(struct BVHTreeFromMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -213,7 +213,7 @@ BVHTree *bvhtree_from_mesh_faces_ex(struct BVHTreeFromMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -230,7 +230,7 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -252,7 +252,7 @@ BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data, float epsilon, int tree_type, int axis, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); @@ -264,7 +264,7 @@ BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data, */ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data, const struct Mesh *mesh, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, int tree_type); /** @@ -273,7 +273,7 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data, BVHTree *BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data, struct BMEditMesh *em, int tree_type, - const BVHCacheType bvh_cache_type, + BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex); diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index b5b6296a0fa..17a44274712 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -323,7 +323,7 @@ void CustomData_bmesh_copy_data_exclude_by_type(const struct CustomData *source, struct CustomData *dest, void *src_block, void **dest_block, - const CustomDataMask mask_exclude); + CustomDataMask mask_exclude); /** * Copies data of a single layer of a given type. @@ -496,7 +496,7 @@ void CustomData_bmesh_free_block_data(struct CustomData *data, void *block); */ void CustomData_bmesh_free_block_data_exclude_by_type(struct CustomData *data, void *block, - const CustomDataMask mask_exclude); + CustomDataMask mask_exclude); /** * Copy custom data to/from layers as in mesh/derived-mesh, to edit-mesh diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh index acb89637f20..f92f33b2776 100644 --- a/source/blender/blenkernel/BKE_geometry_set.hh +++ b/source/blender/blenkernel/BKE_geometry_set.hh @@ -23,11 +23,11 @@ #include <atomic> #include <iostream> -#include "BLI_float3.hh" #include "BLI_float4x4.hh" #include "BLI_function_ref.hh" #include "BLI_hash.hh" #include "BLI_map.hh" +#include "BLI_math_vec_types.hh" #include "BLI_set.hh" #include "BLI_user_counter.hh" #include "BLI_vector_set.hh" diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h index 7b87189a13f..80c6b155be0 100644 --- a/source/blender/blenkernel/BKE_image.h +++ b/source/blender/blenkernel/BKE_image.h @@ -367,7 +367,7 @@ void BKE_image_packfiles(struct ReportList *reports, struct Image *ima, const ch void BKE_image_packfiles_from_mem(struct ReportList *reports, struct Image *ima, char *data, - const size_t data_len); + size_t data_len); /** * Prints memory statistics for images. diff --git a/source/blender/blenkernel/BKE_mesh_sample.hh b/source/blender/blenkernel/BKE_mesh_sample.hh index 238b6f4dcae..738b768d906 100644 --- a/source/blender/blenkernel/BKE_mesh_sample.hh +++ b/source/blender/blenkernel/BKE_mesh_sample.hh @@ -22,7 +22,7 @@ #include "FN_generic_virtual_array.hh" -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BKE_attribute.h" diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 71d1728a870..a76fe2f83e0 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -1313,6 +1313,7 @@ void ntreeGPUMaterialNodes(struct bNodeTree *localtree, #define CMP_NODE_CRYPTOMATTE 326 #define CMP_NODE_POSTERIZE 327 #define CMP_NODE_CONVERT_COLOR_SPACE 328 +#define CMP_NODE_SCENE_TIME 329 /* channel toggles */ #define CMP_CHAN_RGB 1 @@ -1373,18 +1374,12 @@ void ntreeCompositTagRender(struct Scene *scene); * - Each render layer node calls the update function of the * render engine that's used for its scene. * - The render engine calls RE_engine_register_pass for each pass. - * - #RE_engine_register_pass calls #ntreeCompositRegisterPass, - * which calls #node_cmp_rlayers_register_pass for every render layer node. + * - #RE_engine_register_pass calls #node_cmp_rlayers_register_pass. * * TODO: This is *not* part of `blenkernel`, it's defined under "source/blender/nodes/". * This declaration should be moved out of BKE. */ void ntreeCompositUpdateRLayers(struct bNodeTree *ntree); -void ntreeCompositRegisterPass(struct bNodeTree *ntree, - struct Scene *scene, - struct ViewLayer *view_layer, - const char *name, - eNodeSocketDatatype type); void ntreeCompositClearTags(struct bNodeTree *ntree); struct bNodeSocket *ntreeCompositOutputFileAddSocket(struct bNodeTree *ntree, diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 8610bc09a92..a40359e8650 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -317,11 +317,8 @@ void BKE_scene_multiview_view_prefix_get(struct Scene *scene, const char *name, char *r_prefix, const char **r_ext); -void BKE_scene_multiview_videos_dimensions_get(const struct RenderData *rd, - const size_t width, - const size_t height, - size_t *r_width, - size_t *r_height); +void BKE_scene_multiview_videos_dimensions_get( + const struct RenderData *rd, size_t width, size_t height, size_t *r_width, size_t *r_height); int BKE_scene_multiview_num_videos_get(const struct RenderData *rd); /* depsgraph */ diff --git a/source/blender/blenkernel/BKE_spline.hh b/source/blender/blenkernel/BKE_spline.hh index 2c14880978f..a87f76da8da 100644 --- a/source/blender/blenkernel/BKE_spline.hh +++ b/source/blender/blenkernel/BKE_spline.hh @@ -24,8 +24,8 @@ #include "FN_generic_virtual_array.hh" -#include "BLI_float3.hh" #include "BLI_float4x4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_vector.hh" #include "BKE_attribute_access.hh" diff --git a/source/blender/blenkernel/BKE_vfont.h b/source/blender/blenkernel/BKE_vfont.h index d0a44ce4e47..3397f2ef82a 100644 --- a/source/blender/blenkernel/BKE_vfont.h +++ b/source/blender/blenkernel/BKE_vfont.h @@ -104,7 +104,7 @@ void BKE_vfont_select_clamp(struct Object *ob); void BKE_vfont_clipboard_free(void); void BKE_vfont_clipboard_set(const char32_t *text_buf, const struct CharInfo *info_buf, - const size_t len); + size_t len); void BKE_vfont_clipboard_get(char32_t **r_text_buf, struct CharInfo **r_info_buf, size_t *r_len_utf8, diff --git a/source/blender/blenkernel/BKE_volume.h b/source/blender/blenkernel/BKE_volume.h index 2b551a76d73..b40facc3572 100644 --- a/source/blender/blenkernel/BKE_volume.h +++ b/source/blender/blenkernel/BKE_volume.h @@ -163,8 +163,8 @@ bool BKE_volume_save(const struct Volume *volume, * file or copy shared grids to make them writeable. */ #ifdef __cplusplus -# include "BLI_float3.hh" # include "BLI_float4x4.hh" +# include "BLI_math_vec_types.hh" # include "BLI_string_ref.hh" bool BKE_volume_min_max(const Volume *volume, blender::float3 &r_min, blender::float3 &r_max); diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc index 547cfe7f3a9..f25c0044c7d 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.cc +++ b/source/blender/blenkernel/intern/DerivedMesh.cc @@ -38,9 +38,9 @@ #include "BLI_array.h" #include "BLI_bitmap.h" #include "BLI_blenlib.h" -#include "BLI_float2.hh" #include "BLI_linklist.h" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_task.h" #include "BLI_task.hh" #include "BLI_utildefines.h" diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index 1a4265d936b..cc43a3e26a8 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -30,7 +30,7 @@ #include "DNA_pointcloud_types.h" #include "BLI_color.hh" -#include "BLI_float2.hh" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "BLT_translation.h" diff --git a/source/blender/blenkernel/intern/data_transfer_intern.h b/source/blender/blenkernel/intern/data_transfer_intern.h index e5218415df9..b5b3db31fbf 100644 --- a/source/blender/blenkernel/intern/data_transfer_intern.h +++ b/source/blender/blenkernel/intern/data_transfer_intern.h @@ -44,9 +44,9 @@ void data_transfer_layersmapping_add_item(struct ListBase *r_map, void *data_dst, int data_src_n, int data_dst_n, - const size_t elem_size, - const size_t data_size, - const size_t data_offset, + size_t elem_size, + size_t data_size, + size_t data_offset, uint64_t data_flag, cd_datatransfer_interp interp, void *interp_data); diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc index 162130397eb..11b350ef2be 100644 --- a/source/blender/blenkernel/intern/geometry_component_mesh.cc +++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc @@ -152,8 +152,8 @@ VArray<float3> mesh_normals_varray(const MeshComponent &mesh_component, Span<MEdge> edges{mesh.medge, mesh.totedge}; for (const int i : mask) { const MEdge &edge = edges[i]; - edge_normals[i] = - float3::interpolate(vert_normals[edge.v1], vert_normals[edge.v2], 0.5f).normalized(); + edge_normals[i] = math::normalize( + math::interpolate(vert_normals[edge.v1], vert_normals[edge.v2], 0.5f)); } return VArray<float3>::ForContainer(std::move(edge_normals)); diff --git a/source/blender/blenkernel/intern/gpencil_geom.cc b/source/blender/blenkernel/intern/gpencil_geom.cc index 07aebb26e80..9abdbceec61 100644 --- a/source/blender/blenkernel/intern/gpencil_geom.cc +++ b/source/blender/blenkernel/intern/gpencil_geom.cc @@ -33,10 +33,10 @@ #include "BLI_array_utils.h" #include "BLI_blenlib.h" -#include "BLI_float3.hh" #include "BLI_ghash.h" #include "BLI_hash.h" #include "BLI_heap.h" +#include "BLI_math_vec_types.hh" #include "BLI_math_vector.h" #include "BLI_polyfill_2d.h" #include "BLI_span.hh" diff --git a/source/blender/blenkernel/intern/hair.cc b/source/blender/blenkernel/intern/hair.cc index c5b154c9a4b..b7ba159f631 100644 --- a/source/blender/blenkernel/intern/hair.cc +++ b/source/blender/blenkernel/intern/hair.cc @@ -28,9 +28,9 @@ #include "DNA_material_types.h" #include "DNA_object_types.h" -#include "BLI_float3.hh" #include "BLI_listbase.h" #include "BLI_math_base.h" +#include "BLI_math_vec_types.hh" #include "BLI_rand.h" #include "BLI_string.h" #include "BLI_utildefines.h" diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 4899c3671aa..23b1054f814 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -2446,7 +2446,7 @@ void BKE_image_stamp_buf(Scene *scene, /* and draw the text. */ BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.file, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.file, sizeof(stamp_data.file)); /* the extra pixel for background. */ y -= BUFF_MARGIN_Y * 2; @@ -2469,7 +2469,7 @@ void BKE_image_stamp_buf(Scene *scene, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.date, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.date, sizeof(stamp_data.date)); /* the extra pixel for background. */ y -= BUFF_MARGIN_Y * 2; @@ -2492,7 +2492,7 @@ void BKE_image_stamp_buf(Scene *scene, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.rendertime, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.rendertime, sizeof(stamp_data.rendertime)); /* the extra pixel for background. */ y -= BUFF_MARGIN_Y * 2; @@ -2515,7 +2515,7 @@ void BKE_image_stamp_buf(Scene *scene, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.memory, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.memory, sizeof(stamp_data.memory)); /* the extra pixel for background. */ y -= BUFF_MARGIN_Y * 2; @@ -2538,7 +2538,7 @@ void BKE_image_stamp_buf(Scene *scene, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.hostname, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.hostname, sizeof(stamp_data.hostname)); /* the extra pixel for background. */ y -= BUFF_MARGIN_Y * 2; @@ -2562,7 +2562,7 @@ void BKE_image_stamp_buf(Scene *scene, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs + (h - h_fixed), 0.0); - BLF_draw_buffer(mono, stamp_data.note, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.note, sizeof(stamp_data.note)); } BLF_disable(mono, BLF_WORD_WRAP); @@ -2586,7 +2586,7 @@ void BKE_image_stamp_buf(Scene *scene, /* and pad the text. */ BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.marker, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.marker, sizeof(stamp_data.marker)); /* space width. */ x += w + pad; @@ -2609,7 +2609,7 @@ void BKE_image_stamp_buf(Scene *scene, /* and pad the text. */ BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.time, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.time, sizeof(stamp_data.time)); /* space width. */ x += w + pad; @@ -2631,7 +2631,7 @@ void BKE_image_stamp_buf(Scene *scene, /* and pad the text. */ BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.frame, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.frame, sizeof(stamp_data.frame)); /* space width. */ x += w + pad; @@ -2651,7 +2651,7 @@ void BKE_image_stamp_buf(Scene *scene, x + w + BUFF_MARGIN_X, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.camera, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.camera, sizeof(stamp_data.camera)); /* space width. */ x += w + pad; @@ -2671,7 +2671,7 @@ void BKE_image_stamp_buf(Scene *scene, x + w + BUFF_MARGIN_X, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.cameralens, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.cameralens, sizeof(stamp_data.cameralens)); } if (TEXT_SIZE_CHECK(stamp_data.scene, w, h)) { @@ -2693,7 +2693,7 @@ void BKE_image_stamp_buf(Scene *scene, /* and pad the text. */ BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.scene, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.scene, sizeof(stamp_data.scene)); } if (TEXT_SIZE_CHECK(stamp_data.strip, w, h)) { @@ -2715,7 +2715,7 @@ void BKE_image_stamp_buf(Scene *scene, y + h + BUFF_MARGIN_Y); BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.strip, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(mono, stamp_data.strip, sizeof(stamp_data.strip)); } /* cleanup the buffer. */ diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index 6f498c5c9e7..12bbab57cf2 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -38,6 +38,7 @@ #include "BLT_translation.h" +#include "DNA_defaults.h" #include "DNA_mask_types.h" #include "BKE_animsys.h" @@ -1308,7 +1309,7 @@ void BKE_mask_point_parent_matrix_get(MaskSplinePoint *point, MovieTrackingObject *ob = BKE_tracking_object_get_named(tracking, parent->parent); if (ob) { - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); float clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, ctime); BKE_movieclip_user_set_frame(&user, ctime); diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc index 973852d7c22..a7e263bcc9c 100644 --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@ -36,13 +36,13 @@ #include "BLI_bitmap.h" #include "BLI_edgehash.h" #include "BLI_endian_switch.h" -#include "BLI_float3.hh" #include "BLI_ghash.h" #include "BLI_hash.h" #include "BLI_index_range.hh" #include "BLI_linklist.h" #include "BLI_listbase.h" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_memarena.h" #include "BLI_string.h" #include "BLI_task.hh" @@ -1628,16 +1628,16 @@ bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3]) [&](IndexRange range, const Result &init) { Result result = init; for (const int i : range) { - float3::min_max(me->mvert[i].co, result.min, result.max); + math::min_max(float3(me->mvert[i].co), result.min, result.max); } return result; }, [](const Result &a, const Result &b) { - return Result{float3::min(a.min, b.min), float3::max(a.max, b.max)}; + return Result{math::min(a.min, b.min), math::max(a.max, b.max)}; }); - copy_v3_v3(r_min, float3::min(minmax.min, r_min)); - copy_v3_v3(r_max, float3::max(minmax.max, r_max)); + copy_v3_v3(r_min, math::min(minmax.min, float3(r_min))); + copy_v3_v3(r_max, math::max(minmax.max, float3(r_max))); return true; } diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc index 771d79a0445..a4a5fe2be2e 100644 --- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc +++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc @@ -32,9 +32,9 @@ #include "BLI_alloca.h" #include "BLI_array.hh" -#include "BLI_float2.hh" #include "BLI_float4x4.hh" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_mesh_boolean.hh" #include "BLI_mesh_intersect.hh" #include "BLI_span.hh" diff --git a/source/blender/blenkernel/intern/mesh_normals.cc b/source/blender/blenkernel/intern/mesh_normals.cc index 16241b0f0dd..d4f32dbc50c 100644 --- a/source/blender/blenkernel/intern/mesh_normals.cc +++ b/source/blender/blenkernel/intern/mesh_normals.cc @@ -36,10 +36,10 @@ #include "BLI_bitmap.h" #include "BLI_array.hh" -#include "BLI_float3.hh" #include "BLI_linklist.h" #include "BLI_linklist_stack.h" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_memarena.h" #include "BLI_span.hh" #include "BLI_stack.h" diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc index 3447185089d..50464da86e9 100644 --- a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc +++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc @@ -31,8 +31,8 @@ #include "MEM_guardedalloc.h" #include "BLI_array.hh" -#include "BLI_float3.hh" #include "BLI_index_range.hh" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "DNA_mesh_types.h" diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index e8975c82c46..88da789cdc4 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -953,7 +953,7 @@ static MovieClip *movieclip_alloc(Main *bmain, const char *name) static void movieclip_load_get_size(MovieClip *clip) { int width, height; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); user.framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, 1); BKE_movieclip_get_size(clip, &user, &width, &height); diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 1cb3fd6153c..8c6bdb13708 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -4447,6 +4447,7 @@ static void registerCompositNodes() register_node_type_cmp_value(); register_node_type_cmp_rgb(); register_node_type_cmp_curve_time(); + register_node_type_cmp_scene_time(); register_node_type_cmp_movieclip(); register_node_type_cmp_composite(); diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc index 35740f503f4..5dcb753abf4 100644 --- a/source/blender/blenkernel/intern/object_dupli.cc +++ b/source/blender/blenkernel/intern/object_dupli.cc @@ -31,9 +31,9 @@ #include "BLI_string_utf8.h" #include "BLI_array.hh" -#include "BLI_float3.hh" #include "BLI_float4x4.hh" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_rand.h" #include "BLI_span.hh" #include "BLI_vector.hh" @@ -1025,6 +1025,8 @@ static void get_dupliface_transform_from_coords(Span<float3> coords, const float scale_fac, float r_mat[4][4]) { + using namespace blender::math; + /* Location. */ float3 location(0); for (const float3 &coord : coords) { @@ -1035,9 +1037,7 @@ static void get_dupliface_transform_from_coords(Span<float3> coords, /* Rotation. */ float quat[4]; - float3 f_no; - cross_poly_v3(f_no, (const float(*)[3])coords.data(), (uint)coords.size()); - f_no.normalize(); + float3 f_no = normalize(cross_poly(coords)); tri_to_quat_ex(quat, coords[0], coords[1], coords[2], f_no); /* Scale. */ @@ -1649,6 +1649,14 @@ static const DupliGenerator *get_dupli_generator(const DupliContext *ctx) return nullptr; } + /* Give "Object as Font" instances higher priority than geometry set instances, to retain + * the behavior from before curve object meshes were processed as instances internally. */ + if (transflag & OB_DUPLIVERTS) { + if (ctx->object->type == OB_FONT) { + return &gen_dupli_verts_font; + } + } + if (ctx->object->runtime.geometry_set_eval != nullptr) { if (BKE_object_has_geometry_set_instances(ctx->object)) { return &gen_dupli_geometry_set; @@ -1662,9 +1670,6 @@ static const DupliGenerator *get_dupli_generator(const DupliContext *ctx) if (ctx->object->type == OB_MESH) { return &gen_dupli_verts; } - if (ctx->object->type == OB_FONT) { - return &gen_dupli_verts_font; - } if (ctx->object->type == OB_POINTCLOUD) { return &gen_dupli_verts_pointcloud; } diff --git a/source/blender/blenkernel/intern/pointcloud.cc b/source/blender/blenkernel/intern/pointcloud.cc index a041e04bf71..b5f016e4d76 100644 --- a/source/blender/blenkernel/intern/pointcloud.cc +++ b/source/blender/blenkernel/intern/pointcloud.cc @@ -25,9 +25,9 @@ #include "DNA_object_types.h" #include "DNA_pointcloud_types.h" -#include "BLI_float3.hh" #include "BLI_index_range.hh" #include "BLI_listbase.h" +#include "BLI_math_vec_types.hh" #include "BLI_rand.h" #include "BLI_span.hh" #include "BLI_string.h" @@ -275,6 +275,8 @@ struct MinMaxResult { static MinMaxResult min_max_no_radii(Span<float3> positions) { + using namespace blender::math; + return blender::threading::parallel_reduce( positions.index_range(), 1024, @@ -282,17 +284,19 @@ static MinMaxResult min_max_no_radii(Span<float3> positions) [&](IndexRange range, const MinMaxResult &init) { MinMaxResult result = init; for (const int i : range) { - float3::min_max(positions[i], result.min, result.max); + min_max(positions[i], result.min, result.max); } return result; }, [](const MinMaxResult &a, const MinMaxResult &b) { - return MinMaxResult{float3::min(a.min, b.min), float3::max(a.max, b.max)}; + return MinMaxResult{min(a.min, b.min), max(a.max, b.max)}; }); } static MinMaxResult min_max_with_radii(Span<float3> positions, Span<float> radii) { + using namespace blender::math; + return blender::threading::parallel_reduce( positions.index_range(), 1024, @@ -300,18 +304,20 @@ static MinMaxResult min_max_with_radii(Span<float3> positions, Span<float> radii [&](IndexRange range, const MinMaxResult &init) { MinMaxResult result = init; for (const int i : range) { - result.min = float3::min(positions[i] - radii[i], result.min); - result.max = float3::max(positions[i] + radii[i], result.max); + result.min = min(positions[i] - radii[i], result.min); + result.max = max(positions[i] + radii[i], result.max); } return result; }, [](const MinMaxResult &a, const MinMaxResult &b) { - return MinMaxResult{float3::min(a.min, b.min), float3::max(a.max, b.max)}; + return MinMaxResult{min(a.min, b.min), max(a.max, b.max)}; }); } bool BKE_pointcloud_minmax(const PointCloud *pointcloud, float r_min[3], float r_max[3]) { + using namespace blender::math; + if (!pointcloud->totpoint) { return false; } @@ -322,8 +328,8 @@ bool BKE_pointcloud_minmax(const PointCloud *pointcloud, float r_min[3], float r {pointcloud->radius, pointcloud->totpoint}) : min_max_no_radii(positions); - copy_v3_v3(r_min, float3::min(min_max.min, r_min)); - copy_v3_v3(r_max, float3::max(min_max.max, r_max)); + copy_v3_v3(r_min, min(min_max.min, float3(r_min))); + copy_v3_v3(r_max, max(min_max.max, float3(r_max))); return true; } @@ -340,7 +346,7 @@ BoundBox *BKE_pointcloud_boundbox_get(Object *ob) ob->runtime.bb = static_cast<BoundBox *>(MEM_callocN(sizeof(BoundBox), "pointcloud boundbox")); } - blender::float3 min, max; + float3 min, max; INIT_MINMAX(min, max); if (ob->runtime.geometry_set_eval != nullptr) { ob->runtime.geometry_set_eval->compute_boundbox_without_instances(&min, &max); diff --git a/source/blender/blenkernel/intern/simulation.cc b/source/blender/blenkernel/intern/simulation.cc index b0f9de5963a..ec4b0e8d51d 100644 --- a/source/blender/blenkernel/intern/simulation.cc +++ b/source/blender/blenkernel/intern/simulation.cc @@ -28,9 +28,9 @@ #include "DNA_simulation_types.h" #include "BLI_compiler_compat.h" -#include "BLI_float3.hh" #include "BLI_listbase.h" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_rand.h" #include "BLI_span.hh" #include "BLI_string.h" diff --git a/source/blender/blenkernel/intern/spline_base.cc b/source/blender/blenkernel/intern/spline_base.cc index 857022345f3..3262d768b6c 100644 --- a/source/blender/blenkernel/intern/spline_base.cc +++ b/source/blender/blenkernel/intern/spline_base.cc @@ -166,13 +166,15 @@ static void accumulate_lengths(Span<float3> positions, const bool is_cyclic, MutableSpan<float> lengths) { + using namespace blender::math; + float length = 0.0f; for (const int i : IndexRange(positions.size() - 1)) { - length += float3::distance(positions[i], positions[i + 1]); + length += distance(positions[i], positions[i + 1]); lengths[i] = length; } if (is_cyclic) { - lengths.last() = length + float3::distance(positions.last(), positions.first()); + lengths.last() = length + distance(positions.last(), positions.first()); } } @@ -200,11 +202,13 @@ Span<float> Spline::evaluated_lengths() const static float3 direction_bisect(const float3 &prev, const float3 &middle, const float3 &next) { - const float3 dir_prev = (middle - prev).normalized(); - const float3 dir_next = (next - middle).normalized(); + using namespace blender::math; + + const float3 dir_prev = normalize(middle - prev); + const float3 dir_next = normalize(next - middle); - const float3 result = (dir_prev + dir_next).normalized(); - if (UNLIKELY(result.is_zero())) { + const float3 result = normalize(dir_prev + dir_next); + if (UNLIKELY(is_zero(result))) { return float3(0.0f, 0.0f, 1.0f); } return result; @@ -214,6 +218,8 @@ static void calculate_tangents(Span<float3> positions, const bool is_cyclic, MutableSpan<float3> tangents) { + using namespace blender::math; + if (positions.size() == 1) { tangents.first() = float3(0.0f, 0.0f, 1.0f); return; @@ -232,8 +238,8 @@ static void calculate_tangents(Span<float3> positions, tangents.last() = direction_bisect(second_to_last, last, first); } else { - tangents.first() = (positions[1] - positions[0]).normalized(); - tangents.last() = (positions.last() - positions[positions.size() - 2]).normalized(); + tangents.first() = normalize(positions[1] - positions[0]); + tangents.last() = normalize(positions.last() - positions[positions.size() - 2]); } } @@ -264,18 +270,22 @@ static float3 rotate_direction_around_axis(const float3 &direction, const float3 &axis, const float angle) { + using namespace blender::math; + BLI_ASSERT_UNIT_V3(direction); BLI_ASSERT_UNIT_V3(axis); - const float3 axis_scaled = axis * float3::dot(direction, axis); + const float3 axis_scaled = axis * dot(direction, axis); const float3 diff = direction - axis_scaled; - const float3 cross = float3::cross(axis, diff); + const float3 cross = blender::math::cross(axis, diff); return axis_scaled + diff * std::cos(angle) + cross * std::sin(angle); } static void calculate_normals_z_up(Span<float3> tangents, MutableSpan<float3> r_normals) { + using namespace blender::math; + BLI_assert(r_normals.size() == tangents.size()); /* Same as in `vec_to_quat`. */ @@ -286,7 +296,7 @@ static void calculate_normals_z_up(Span<float3> tangents, MutableSpan<float3> r_ r_normals[i] = {1.0f, 0.0f, 0.0f}; } else { - r_normals[i] = float3(tangent.y, -tangent.x, 0.0f).normalized(); + r_normals[i] = normalize(float3(tangent.y, -tangent.x, 0.0f)); } } } @@ -298,12 +308,14 @@ static float3 calculate_next_normal(const float3 &last_normal, const float3 &last_tangent, const float3 ¤t_tangent) { - if (last_tangent.is_zero() || current_tangent.is_zero()) { + using namespace blender::math; + + if (is_zero(last_tangent) || is_zero(current_tangent)) { return last_normal; } const float angle = angle_normalized_v3v3(last_tangent, current_tangent); if (angle != 0.0) { - const float3 axis = float3::cross(last_tangent, current_tangent).normalized(); + const float3 axis = normalize(cross(last_tangent, current_tangent)); return rotate_direction_around_axis(last_normal, axis, angle); } return last_normal; @@ -313,6 +325,7 @@ static void calculate_normals_minimum(Span<float3> tangents, const bool cyclic, MutableSpan<float3> r_normals) { + using namespace blender::math; BLI_assert(r_normals.size() == tangents.size()); if (r_normals.is_empty()) { @@ -327,7 +340,7 @@ static void calculate_normals_minimum(Span<float3> tangents, r_normals[0] = {1.0f, 0.0f, 0.0f}; } else { - r_normals[0] = float3(first_tangent.y, -first_tangent.x, 0.0f).normalized(); + r_normals[0] = normalize(float3(first_tangent.y, -first_tangent.x, 0.0f)); } /* Forward normal with minimum twist along the entire spline. */ diff --git a/source/blender/blenkernel/intern/spline_bezier.cc b/source/blender/blenkernel/intern/spline_bezier.cc index b24c8960857..980437014b1 100644 --- a/source/blender/blenkernel/intern/spline_bezier.cc +++ b/source/blender/blenkernel/intern/spline_bezier.cc @@ -199,11 +199,13 @@ void BezierSpline::ensure_auto_handles() const } for (const int i : IndexRange(this->size())) { + using namespace blender; + if (ELEM(HandleType::Auto, handle_types_left_[i], handle_types_right_[i])) { const float3 prev_diff = positions_[i] - previous_position(positions_, is_cyclic_, i); const float3 next_diff = next_position(positions_, is_cyclic_, i) - positions_[i]; - float prev_len = prev_diff.length(); - float next_len = next_diff.length(); + float prev_len = math::length(prev_diff); + float next_len = math::length(next_diff); if (prev_len == 0.0f) { prev_len = 1.0f; } @@ -213,7 +215,7 @@ void BezierSpline::ensure_auto_handles() const const float3 dir = next_diff / next_len + prev_diff / prev_len; /* This magic number is unfortunate, but comes from elsewhere in Blender. */ - const float len = dir.length() * 2.5614f; + const float len = math::length(dir) * 2.5614f; if (len != 0.0f) { if (handle_types_left_[i] == HandleType::Auto) { const float prev_len_clamped = std::min(prev_len, next_len * 5.0f); @@ -228,12 +230,12 @@ void BezierSpline::ensure_auto_handles() const if (handle_types_left_[i] == HandleType::Vector) { const float3 prev = previous_position(positions_, is_cyclic_, i); - handle_positions_left_[i] = float3::interpolate(positions_[i], prev, 1.0f / 3.0f); + handle_positions_left_[i] = math::interpolate(positions_[i], prev, 1.0f / 3.0f); } if (handle_types_right_[i] == HandleType::Vector) { const float3 next = next_position(positions_, is_cyclic_, i); - handle_positions_right_[i] = float3::interpolate(positions_[i], next, 1.0f / 3.0f); + handle_positions_right_[i] = math::interpolate(positions_[i], next, 1.0f / 3.0f); } } @@ -275,6 +277,8 @@ static void set_handle_position(const float3 &position, float3 &handle, float3 &handle_other) { + using namespace blender::math; + /* Don't bother when the handle positions are calculated automatically anyway. */ if (ELEM(type, BezierSpline::HandleType::Auto, BezierSpline::HandleType::Vector)) { return; @@ -283,9 +287,9 @@ static void set_handle_position(const float3 &position, handle = new_value; if (type_other == BezierSpline::HandleType::Align) { /* Keep track of the old length of the opposite handle. */ - const float length = float3::distance(handle_other, position); + const float length = distance(handle_other, position); /* Set the other handle to directly opposite from the current handle. */ - const float3 dir = (handle - position).normalized(); + const float3 dir = normalize(handle - position); handle_other = position - dir * length; } } @@ -353,6 +357,7 @@ int BezierSpline::evaluated_points_size() const void BezierSpline::correct_end_tangents() const { + using namespace blender::math; if (is_cyclic_) { return; } @@ -360,10 +365,10 @@ void BezierSpline::correct_end_tangents() const MutableSpan<float3> tangents(evaluated_tangents_cache_); if (handle_positions_right_.first() != positions_.first()) { - tangents.first() = (handle_positions_right_.first() - positions_.first()).normalized(); + tangents.first() = normalize(handle_positions_right_.first() - positions_.first()); } if (handle_positions_left_.last() != positions_.last()) { - tangents.last() = (positions_.last() - handle_positions_left_.last()).normalized(); + tangents.last() = normalize(positions_.last() - handle_positions_left_.last()); } } @@ -371,20 +376,22 @@ BezierSpline::InsertResult BezierSpline::calculate_segment_insertion(const int i const int next_index, const float parameter) { + using namespace blender::math; + BLI_assert(parameter <= 1.0f && parameter >= 0.0f); BLI_assert(next_index == 0 || next_index == index + 1); const float3 &point_prev = positions_[index]; const float3 &handle_prev = handle_positions_right_[index]; const float3 &handle_next = handle_positions_left_[next_index]; const float3 &point_next = positions_[next_index]; - const float3 center_point = float3::interpolate(handle_prev, handle_next, parameter); + const float3 center_point = interpolate(handle_prev, handle_next, parameter); BezierSpline::InsertResult result; - result.handle_prev = float3::interpolate(point_prev, handle_prev, parameter); - result.handle_next = float3::interpolate(handle_next, point_next, parameter); - result.left_handle = float3::interpolate(result.handle_prev, center_point, parameter); - result.right_handle = float3::interpolate(center_point, result.handle_next, parameter); - result.position = float3::interpolate(result.left_handle, result.right_handle, parameter); + result.handle_prev = interpolate(point_prev, handle_prev, parameter); + result.handle_next = interpolate(handle_next, point_next, parameter); + result.left_handle = interpolate(result.handle_prev, center_point, parameter); + result.right_handle = interpolate(center_point, result.handle_next, parameter); + result.position = interpolate(result.left_handle, result.right_handle, parameter); return result; } diff --git a/source/blender/blenkernel/intern/tracking_region_tracker.c b/source/blender/blenkernel/intern/tracking_region_tracker.c index 2265c05463b..4b23f74bc8f 100644 --- a/source/blender/blenkernel/intern/tracking_region_tracker.c +++ b/source/blender/blenkernel/intern/tracking_region_tracker.c @@ -26,6 +26,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_defaults.h" #include "DNA_movieclip_types.h" #include "BLI_threads.h" @@ -322,7 +323,7 @@ void BKE_tracking_refine_marker(MovieClip *clip, int search_area_height, search_area_width; int clip_flag = clip->flag & MCLIP_TIMECODE_FLAGS; int reference_framenr; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); double dst_pixel_x[5], dst_pixel_y[5]; bool tracked; diff --git a/source/blender/blenkernel/intern/tracking_test.cc b/source/blender/blenkernel/intern/tracking_test.cc index a3845dcad8f..d85d71b7c86 100644 --- a/source/blender/blenkernel/intern/tracking_test.cc +++ b/source/blender/blenkernel/intern/tracking_test.cc @@ -5,7 +5,7 @@ #include "DNA_tracking_types.h" #include "BKE_tracking.h" -#include "BLI_float2.hh" +#include "BLI_math_vec_types.hh" namespace blender { diff --git a/source/blender/blenkernel/intern/type_conversions.cc b/source/blender/blenkernel/intern/type_conversions.cc index b23220286e6..cb05337ef2a 100644 --- a/source/blender/blenkernel/intern/type_conversions.cc +++ b/source/blender/blenkernel/intern/type_conversions.cc @@ -19,8 +19,7 @@ #include "FN_multi_function_builder.hh" #include "BLI_color.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" namespace blender::bke { diff --git a/source/blender/blenkernel/intern/volume.cc b/source/blender/blenkernel/intern/volume.cc index 4b71c98339b..c17706dc216 100644 --- a/source/blender/blenkernel/intern/volume.cc +++ b/source/blender/blenkernel/intern/volume.cc @@ -28,12 +28,12 @@ #include "BLI_compiler_compat.h" #include "BLI_fileops.h" -#include "BLI_float3.hh" #include "BLI_float4x4.hh" #include "BLI_ghash.h" #include "BLI_index_range.hh" #include "BLI_map.hh" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_path_util.h" #include "BLI_string.h" #include "BLI_string_ref.hh" diff --git a/source/blender/blenkernel/intern/volume_render.cc b/source/blender/blenkernel/intern/volume_render.cc index 6dc497bb616..c0a205b5673 100644 --- a/source/blender/blenkernel/intern/volume_render.cc +++ b/source/blender/blenkernel/intern/volume_render.cc @@ -21,8 +21,8 @@ #include "MEM_guardedalloc.h" #include "BLI_array.hh" -#include "BLI_float3.hh" #include "BLI_math_matrix.h" +#include "BLI_math_vec_types.hh" #include "BLI_math_vector.h" #include "BLI_vector.hh" diff --git a/source/blender/blenkernel/intern/volume_to_mesh.cc b/source/blender/blenkernel/intern/volume_to_mesh.cc index 6e465b2fdf0..733549c0022 100644 --- a/source/blender/blenkernel/intern/volume_to_mesh.cc +++ b/source/blender/blenkernel/intern/volume_to_mesh.cc @@ -16,7 +16,7 @@ #include <vector> -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "BLI_utildefines.h" diff --git a/source/blender/blenlib/BLI_array_store.h b/source/blender/blenlib/BLI_array_store.h index 0be361d4ab9..68928f53e55 100644 --- a/source/blender/blenlib/BLI_array_store.h +++ b/source/blender/blenlib/BLI_array_store.h @@ -84,7 +84,7 @@ size_t BLI_array_store_calc_size_compacted_get(const BArrayStore *bs); */ BArrayState *BLI_array_store_state_add(BArrayStore *bs, const void *data, - const size_t data_len, + size_t data_len, const BArrayState *state_reference); /** * Remove a state and free any unused #BChunk data. diff --git a/source/blender/blenlib/BLI_array_utils.h b/source/blender/blenlib/BLI_array_utils.h index 50fc2ce909b..202ae9a9786 100644 --- a/source/blender/blenlib/BLI_array_utils.h +++ b/source/blender/blenlib/BLI_array_utils.h @@ -52,7 +52,7 @@ void _bli_array_wrap(void *arr, uint arr_len, size_t arr_stride, int dir); * Access via #BLI_array_wrap */ void _bli_array_permute( - void *arr, uint arr_len, const size_t arr_stride, const uint *order, void *arr_temp); + void *arr, uint arr_len, size_t arr_stride, const uint *order, void *arr_temp); #define BLI_array_permute(arr, arr_len, order) \ _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, NULL) #define BLI_array_permute_ex(arr, arr_len, order, arr_temp) \ @@ -152,7 +152,7 @@ bool _bli_array_is_zeroed(const void *arr, uint arr_len, size_t arr_stride); */ bool _bli_array_iter_spiral_square(const void *arr_v, const int arr_shape[2], - const size_t elem_size, + size_t elem_size, const int center[2], bool (*test_fn)(const void *arr_item, void *user_data), void *user_data); diff --git a/source/blender/blenlib/BLI_buffer.h b/source/blender/blenlib/BLI_buffer.h index 7f577443cf7..e79d44fd934 100644 --- a/source/blender/blenlib/BLI_buffer.h +++ b/source/blender/blenlib/BLI_buffer.h @@ -74,7 +74,7 @@ enum { /** * \note Never decreases the amount of memory allocated. */ -void BLI_buffer_resize(BLI_Buffer *buffer, const size_t new_count); +void BLI_buffer_resize(BLI_Buffer *buffer, size_t new_count); /** * Ensure size, throwing away old data, respecting #BLI_BUFFER_USE_CALLOC. @@ -83,7 +83,7 @@ void BLI_buffer_resize(BLI_Buffer *buffer, const size_t new_count); * - Ignored (malloc'd). * - Cleared (when #BLI_BUFFER_USE_CALLOC is set). */ -void BLI_buffer_reinit(BLI_Buffer *buffer, const size_t new_count); +void BLI_buffer_reinit(BLI_Buffer *buffer, size_t new_count); /** * Append an array of elements. diff --git a/source/blender/blenlib/BLI_delaunay_2d.h b/source/blender/blenlib/BLI_delaunay_2d.h index db0df95499f..1ee0be64cee 100644 --- a/source/blender/blenlib/BLI_delaunay_2d.h +++ b/source/blender/blenlib/BLI_delaunay_2d.h @@ -215,9 +215,9 @@ void BLI_delaunay_2d_cdt_free(CDT_result *result); /* C++ Interface. */ # include "BLI_array.hh" -# include "BLI_double2.hh" # include "BLI_math_mpq.hh" -# include "BLI_mpq2.hh" +# include "BLI_math_vec_mpq_types.hh" +# include "BLI_math_vec_types.hh" # include "BLI_vector.hh" namespace blender::meshintersect { diff --git a/source/blender/blenlib/BLI_double2.hh b/source/blender/blenlib/BLI_double2.hh deleted file mode 100644 index 0abff01ab2f..00000000000 --- a/source/blender/blenlib/BLI_double2.hh +++ /dev/null @@ -1,143 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -/** \file - * \ingroup bli - */ - -#include "BLI_double3.hh" - -namespace blender { - -struct double2 { - double x, y; - - double2() = default; - - double2(const double *ptr) : x{ptr[0]}, y{ptr[1]} - { - } - - double2(double x, double y) : x(x), y(y) - { - } - - double2(const double3 &other) : x(other.x), y(other.y) - { - } - - operator double *() - { - return &x; - } - - operator const double *() const - { - return &x; - } - - double length() const - { - return len_v2_db(*this); - } - - friend double2 operator+(const double2 &a, const double2 &b) - { - return {a.x + b.x, a.y + b.y}; - } - - friend double2 operator-(const double2 &a, const double2 &b) - { - return {a.x - b.x, a.y - b.y}; - } - - friend double2 operator*(const double2 &a, double b) - { - return {a.x * b, a.y * b}; - } - - friend double2 operator/(const double2 &a, double b) - { - BLI_assert(b != 0.0); - return {a.x / b, a.y / b}; - } - - friend double2 operator*(double a, const double2 &b) - { - return b * a; - } - - friend bool operator==(const double2 &a, const double2 &b) - { - return a.x == b.x && a.y == b.y; - } - - friend bool operator!=(const double2 &a, const double2 &b) - { - return a.x != b.x || a.y != b.y; - } - - friend std::ostream &operator<<(std::ostream &stream, const double2 &v) - { - stream << "(" << v.x << ", " << v.y << ")"; - return stream; - } - - static double dot(const double2 &a, const double2 &b) - { - return a.x * b.x + a.y * b.y; - } - - static double2 interpolate(const double2 &a, const double2 &b, double t) - { - return a * (1 - t) + b * t; - } - - static double2 abs(const double2 &a) - { - return double2(fabs(a.x), fabs(a.y)); - } - - static double distance(const double2 &a, const double2 &b) - { - return (a - b).length(); - } - - static double distance_squared(const double2 &a, const double2 &b) - { - double2 diff = a - b; - return double2::dot(diff, diff); - } - - struct isect_result { - enum { - LINE_LINE_COLINEAR = -1, - LINE_LINE_NONE = 0, - LINE_LINE_EXACT = 1, - LINE_LINE_CROSS = 2, - } kind; - double lambda; - }; - - static isect_result isect_seg_seg(const double2 &v1, - const double2 &v2, - const double2 &v3, - const double2 &v4); -}; - -} // namespace blender diff --git a/source/blender/blenlib/BLI_double3.hh b/source/blender/blenlib/BLI_double3.hh deleted file mode 100644 index ab258c9121b..00000000000 --- a/source/blender/blenlib/BLI_double3.hh +++ /dev/null @@ -1,246 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -/** \file - * \ingroup bli - */ - -#include <iostream> - -#include "BLI_math_vector.h" -#include "BLI_span.hh" - -namespace blender { - -struct double3 { - double x, y, z; - - double3() = default; - - double3(const double *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]} - { - } - - double3(const double (*ptr)[3]) : double3((const double *)ptr) - { - } - - explicit double3(double value) : x(value), y(value), z(value) - { - } - - explicit double3(int value) : x(value), y(value), z(value) - { - } - - double3(double x, double y, double z) : x{x}, y{y}, z{z} - { - } - - operator const double *() const - { - return &x; - } - - operator double *() - { - return &x; - } - - double normalize_and_get_length() - { - return normalize_v3_db(*this); - } - - double3 normalized() const - { - double3 result; - normalize_v3_v3_db(result, *this); - return result; - } - - double length() const - { - return len_v3_db(*this); - } - - double length_squared() const - { - return len_squared_v3_db(*this); - } - - void reflect(const double3 &normal) - { - *this = this->reflected(normal); - } - - double3 reflected(const double3 &normal) const - { - double3 result; - reflect_v3_v3v3_db(result, *this, normal); - return result; - } - - static double3 safe_divide(const double3 &a, const double3 &b) - { - double3 result; - result.x = (b.x == 0.0) ? 0.0 : a.x / b.x; - result.y = (b.y == 0.0) ? 0.0 : a.y / b.y; - result.z = (b.z == 0.0) ? 0.0 : a.z / b.z; - return result; - } - - void invert() - { - x = -x; - y = -y; - z = -z; - } - - friend double3 operator+(const double3 &a, const double3 &b) - { - return {a.x + b.x, a.y + b.y, a.z + b.z}; - } - - void operator+=(const double3 &b) - { - this->x += b.x; - this->y += b.y; - this->z += b.z; - } - - friend double3 operator-(const double3 &a, const double3 &b) - { - return {a.x - b.x, a.y - b.y, a.z - b.z}; - } - - friend double3 operator-(const double3 &a) - { - return {-a.x, -a.y, -a.z}; - } - - void operator-=(const double3 &b) - { - this->x -= b.x; - this->y -= b.y; - this->z -= b.z; - } - - void operator*=(const double &scalar) - { - this->x *= scalar; - this->y *= scalar; - this->z *= scalar; - } - - void operator*=(const double3 &other) - { - this->x *= other.x; - this->y *= other.y; - this->z *= other.z; - } - - friend double3 operator*(const double3 &a, const double3 &b) - { - return {a.x * b.x, a.y * b.y, a.z * b.z}; - } - - friend double3 operator*(const double3 &a, const double &b) - { - return {a.x * b, a.y * b, a.z * b}; - } - - friend double3 operator*(const double &a, const double3 &b) - { - return b * a; - } - - friend double3 operator/(const double3 &a, const double &b) - { - BLI_assert(b != 0.0); - return {a.x / b, a.y / b, a.z / b}; - } - - friend bool operator==(const double3 &a, const double3 &b) - { - return a.x == b.x && a.y == b.y && a.z == b.z; - } - - friend bool operator!=(const double3 &a, const double3 &b) - { - return a.x != b.x || a.y != b.y || a.z != b.z; - } - - friend std::ostream &operator<<(std::ostream &stream, const double3 &v) - { - stream << "(" << v.x << ", " << v.y << ", " << v.z << ")"; - return stream; - } - - static double dot(const double3 &a, const double3 &b) - { - return a.x * b.x + a.y * b.y + a.z * b.z; - } - - static double3 cross_high_precision(const double3 &a, const double3 &b) - { - double3 result; - cross_v3_v3v3_db(result, a, b); - return result; - } - - static double3 project(const double3 &a, const double3 &b) - { - double3 result; - project_v3_v3v3_db(result, a, b); - return result; - } - - static double distance(const double3 &a, const double3 &b) - { - return (a - b).length(); - } - - static double distance_squared(const double3 &a, const double3 &b) - { - double3 diff = a - b; - return double3::dot(diff, diff); - } - - static double3 interpolate(const double3 &a, const double3 &b, double t) - { - return a * (1 - t) + b * t; - } - - static double3 abs(const double3 &a) - { - return double3(fabs(a.x), fabs(a.y), fabs(a.z)); - } - - static int dominant_axis(const double3 &a) - { - double x = (a.x >= 0) ? a.x : -a.x; - double y = (a.y >= 0) ? a.y : -a.y; - double z = (a.z >= 0) ? a.z : -a.z; - return ((x > y) ? ((x > z) ? 0 : 2) : ((y > z) ? 1 : 2)); - } - - static double3 cross_poly(Span<double3> poly); -}; - -} // namespace blender diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index 0022823b3de..28cb5f6d84b 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -155,8 +155,7 @@ double BLI_dir_free_space(const char *dir) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL( * * \note can return NULL when the size is not big enough */ -char *BLI_current_working_dir(char *dir, const size_t maxncpy) ATTR_WARN_UNUSED_RESULT - ATTR_NONNULL(); +char *BLI_current_working_dir(char *dir, size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); eFileAttributes BLI_file_attributes(const char *path); /** \} */ diff --git a/source/blender/blenlib/BLI_float2.hh b/source/blender/blenlib/BLI_float2.hh deleted file mode 100644 index bb4229db86e..00000000000 --- a/source/blender/blenlib/BLI_float2.hh +++ /dev/null @@ -1,218 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -#include "BLI_float3.hh" - -namespace blender { - -struct float2 { - float x, y; - - float2() = default; - - float2(const float *ptr) : x{ptr[0]}, y{ptr[1]} - { - } - - explicit float2(float value) : x(value), y(value) - { - } - - explicit float2(int value) : x(value), y(value) - { - } - - float2(float x, float y) : x(x), y(y) - { - } - - float2(const float3 &other) : x(other.x), y(other.y) - { - } - - operator float *() - { - return &x; - } - - operator const float *() const - { - return &x; - } - - float length() const - { - return len_v2(*this); - } - - float length_squared() const - { - return len_squared_v2(*this); - } - - bool is_zero() const - { - return this->x == 0.0f && this->y == 0.0f; - } - - float2 &operator+=(const float2 &other) - { - x += other.x; - y += other.y; - return *this; - } - - float2 &operator-=(const float2 &other) - { - x -= other.x; - y -= other.y; - return *this; - } - - float2 &operator*=(float factor) - { - x *= factor; - y *= factor; - return *this; - } - - float2 &operator/=(float divisor) - { - x /= divisor; - y /= divisor; - return *this; - } - - uint64_t hash() const - { - uint64_t x1 = *reinterpret_cast<const uint32_t *>(&x); - uint64_t x2 = *reinterpret_cast<const uint32_t *>(&y); - return (x1 * 812519) ^ (x2 * 707951); - } - - friend float2 operator+(const float2 &a, const float2 &b) - { - return {a.x + b.x, a.y + b.y}; - } - - friend float2 operator-(const float2 &a, const float2 &b) - { - return {a.x - b.x, a.y - b.y}; - } - - friend float2 operator-(const float2 &a, const float &b) - { - return {a.x - b, a.y - b}; - } - - friend float2 operator*(const float2 &a, float b) - { - return {a.x * b, a.y * b}; - } - - friend float2 operator/(const float2 &a, float b) - { - BLI_assert(b != 0.0f); - return {a.x / b, a.y / b}; - } - - friend float2 operator*(float a, const float2 &b) - { - return b * a; - } - - friend std::ostream &operator<<(std::ostream &stream, const float2 &v) - { - stream << "(" << v.x << ", " << v.y << ")"; - return stream; - } - - static float2 safe_divide(const float2 &a, const float b) - { - return (b != 0.0f) ? a / b : float2(0.0f); - } - - static float2 floor(const float2 &a) - { - return float2(floorf(a.x), floorf(a.y)); - } - - /** - * Returns a normalized vector. The original vector is not changed. - */ - float2 normalized() const - { - float2 result; - normalize_v2_v2(result, *this); - return result; - } - - static float dot(const float2 &a, const float2 &b) - { - return a.x * b.x + a.y * b.y; - } - - static float2 interpolate(const float2 &a, const float2 &b, float t) - { - return a * (1 - t) + b * t; - } - - static float2 abs(const float2 &a) - { - return float2(fabsf(a.x), fabsf(a.y)); - } - - static float distance(const float2 &a, const float2 &b) - { - return (a - b).length(); - } - - static float distance_squared(const float2 &a, const float2 &b) - { - float2 diff = a - b; - return float2::dot(diff, diff); - } - - struct isect_result { - enum { - LINE_LINE_COLINEAR = -1, - LINE_LINE_NONE = 0, - LINE_LINE_EXACT = 1, - LINE_LINE_CROSS = 2, - } kind; - float lambda; - float mu; - }; - - static isect_result isect_seg_seg(const float2 &v1, - const float2 &v2, - const float2 &v3, - const float2 &v4); - - friend bool operator==(const float2 &a, const float2 &b) - { - return a.x == b.x && a.y == b.y; - } - - friend bool operator!=(const float2 &a, const float2 &b) - { - return !(a == b); - } -}; - -} // namespace blender diff --git a/source/blender/blenlib/BLI_float3.hh b/source/blender/blenlib/BLI_float3.hh deleted file mode 100644 index 765f524fb31..00000000000 --- a/source/blender/blenlib/BLI_float3.hh +++ /dev/null @@ -1,320 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -#include <iostream> - -#include "BLI_math_vector.h" - -namespace blender { - -struct float3 { - float x, y, z; - - float3() = default; - - float3(const float *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]} - { - } - - float3(const float (*ptr)[3]) : float3(static_cast<const float *>(ptr[0])) - { - } - - explicit float3(float value) : x(value), y(value), z(value) - { - } - - explicit float3(int value) : x(value), y(value), z(value) - { - } - - float3(float x, float y, float z) : x{x}, y{y}, z{z} - { - } - - operator const float *() const - { - return &x; - } - - operator float *() - { - return &x; - } - - friend float3 operator+(const float3 &a, const float3 &b) - { - return {a.x + b.x, a.y + b.y, a.z + b.z}; - } - - friend float3 operator+(const float3 &a, const float &b) - { - return {a.x + b, a.y + b, a.z + b}; - } - - float3 &operator+=(const float3 &b) - { - this->x += b.x; - this->y += b.y; - this->z += b.z; - return *this; - } - - friend float3 operator-(const float3 &a, const float3 &b) - { - return {a.x - b.x, a.y - b.y, a.z - b.z}; - } - - friend float3 operator-(const float3 &a) - { - return {-a.x, -a.y, -a.z}; - } - - friend float3 operator-(const float3 &a, const float &b) - { - return {a.x - b, a.y - b, a.z - b}; - } - - float3 &operator-=(const float3 &b) - { - this->x -= b.x; - this->y -= b.y; - this->z -= b.z; - return *this; - } - - float3 &operator*=(float scalar) - { - this->x *= scalar; - this->y *= scalar; - this->z *= scalar; - return *this; - } - - float3 &operator*=(const float3 &other) - { - this->x *= other.x; - this->y *= other.y; - this->z *= other.z; - return *this; - } - - friend float3 operator*(const float3 &a, const float3 &b) - { - return {a.x * b.x, a.y * b.y, a.z * b.z}; - } - - friend float3 operator*(const float3 &a, float b) - { - return {a.x * b, a.y * b, a.z * b}; - } - - friend float3 operator*(float a, const float3 &b) - { - return b * a; - } - - friend float3 operator/(const float3 &a, float b) - { - BLI_assert(b != 0.0f); - return {a.x / b, a.y / b, a.z / b}; - } - - friend std::ostream &operator<<(std::ostream &stream, const float3 &v) - { - stream << "(" << v.x << ", " << v.y << ", " << v.z << ")"; - return stream; - } - - friend bool operator==(const float3 &a, const float3 &b) - { - return a.x == b.x && a.y == b.y && a.z == b.z; - } - - friend bool operator!=(const float3 &a, const float3 &b) - { - return !(a == b); - } - - float normalize_and_get_length() - { - return normalize_v3(*this); - } - - /** - * Normalizes the vector in place. - */ - void normalize() - { - normalize_v3(*this); - } - - /** - * Returns a normalized vector. The original vector is not changed. - */ - float3 normalized() const - { - float3 result; - normalize_v3_v3(result, *this); - return result; - } - - float length() const - { - return len_v3(*this); - } - - float length_squared() const - { - return len_squared_v3(*this); - } - - bool is_zero() const - { - return this->x == 0.0f && this->y == 0.0f && this->z == 0.0f; - } - - void reflect(const float3 &normal) - { - *this = this->reflected(normal); - } - - float3 reflected(const float3 &normal) const - { - float3 result; - reflect_v3_v3v3(result, *this, normal); - return result; - } - - static float3 refract(const float3 &incident, const float3 &normal, const float eta) - { - float3 result; - float k = 1.0f - eta * eta * (1.0f - dot(normal, incident) * dot(normal, incident)); - if (k < 0.0f) { - result = float3(0.0f); - } - else { - result = eta * incident - (eta * dot(normal, incident) + sqrt(k)) * normal; - } - return result; - } - - static float3 faceforward(const float3 &vector, const float3 &incident, const float3 &reference) - { - return dot(reference, incident) < 0.0f ? vector : -vector; - } - - static float3 safe_divide(const float3 &a, const float3 &b) - { - float3 result; - result.x = (b.x == 0.0f) ? 0.0f : a.x / b.x; - result.y = (b.y == 0.0f) ? 0.0f : a.y / b.y; - result.z = (b.z == 0.0f) ? 0.0f : a.z / b.z; - return result; - } - - static float3 min(const float3 &a, const float3 &b) - { - return {a.x < b.x ? a.x : b.x, a.y < b.y ? a.y : b.y, a.z < b.z ? a.z : b.z}; - } - - static float3 max(const float3 &a, const float3 &b) - { - return {a.x > b.x ? a.x : b.x, a.y > b.y ? a.y : b.y, a.z > b.z ? a.z : b.z}; - } - - static void min_max(const float3 &vector, float3 &min, float3 &max) - { - min = float3::min(vector, min); - max = float3::max(vector, max); - } - - static float3 safe_divide(const float3 &a, const float b) - { - return (b != 0.0f) ? a / b : float3(0.0f); - } - - static float3 floor(const float3 &a) - { - return float3(floorf(a.x), floorf(a.y), floorf(a.z)); - } - - void invert() - { - x = -x; - y = -y; - z = -z; - } - - uint64_t hash() const - { - uint64_t x1 = *reinterpret_cast<const uint32_t *>(&x); - uint64_t x2 = *reinterpret_cast<const uint32_t *>(&y); - uint64_t x3 = *reinterpret_cast<const uint32_t *>(&z); - return (x1 * 435109) ^ (x2 * 380867) ^ (x3 * 1059217); - } - - static float dot(const float3 &a, const float3 &b) - { - return a.x * b.x + a.y * b.y + a.z * b.z; - } - - static float3 cross_high_precision(const float3 &a, const float3 &b) - { - float3 result; - cross_v3_v3v3_hi_prec(result, a, b); - return result; - } - - static float3 cross(const float3 &a, const float3 &b) - { - float3 result; - cross_v3_v3v3(result, a, b); - return result; - } - - static float3 project(const float3 &a, const float3 &b) - { - float3 result; - project_v3_v3v3(result, a, b); - return result; - } - - static float distance(const float3 &a, const float3 &b) - { - return (a - b).length(); - } - - static float distance_squared(const float3 &a, const float3 &b) - { - float3 diff = a - b; - return float3::dot(diff, diff); - } - - static float3 interpolate(const float3 &a, const float3 &b, float t) - { - return a * (1 - t) + b * t; - } - - static float3 abs(const float3 &a) - { - return float3(fabsf(a.x), fabsf(a.y), fabsf(a.z)); - } -}; - -} // namespace blender diff --git a/source/blender/blenlib/BLI_float4.hh b/source/blender/blenlib/BLI_float4.hh deleted file mode 100644 index 5b487f6d029..00000000000 --- a/source/blender/blenlib/BLI_float4.hh +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -namespace blender { - -struct float4 { - float x, y, z, w; - - float4() = default; - - float4(const float *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]}, w{ptr[3]} - { - } - - explicit float4(float value) : x(value), y(value), z(value), w(value) - { - } - - explicit float4(int value) : x(value), y(value), z(value), w(value) - { - } - - float4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) - { - } - - operator float *() - { - return &x; - } - - friend float4 operator+(const float4 &a, const float &b) - { - return {a.x + b, a.y + b, a.z + b, a.w + b}; - } - - operator const float *() const - { - return &x; - } - - float4 &operator+=(const float4 &other) - { - x += other.x; - y += other.y; - z += other.z; - w += other.w; - return *this; - } - - friend float4 operator-(const float4 &a, const float4 &b) - { - return {a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w}; - } - - friend float4 operator-(const float4 &a, const float &b) - { - return {a.x - b, a.y - b, a.z - b, a.w - b}; - } - - friend float4 operator+(const float4 &a, const float4 &b) - { - return {a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w}; - } - - friend float4 operator/(const float4 &a, float f) - { - BLI_assert(f != 0.0f); - return a * (1.0f / f); - } - - float4 &operator*=(float factor) - { - x *= factor; - y *= factor; - z *= factor; - w *= factor; - return *this; - } - - friend float4 operator*(const float4 &a, float b) - { - return {a.x * b, a.y * b, a.z * b, a.w * b}; - } - - friend float4 operator*(float a, const float4 &b) - { - return b * a; - } - - float length() const - { - return len_v4(*this); - } - - static float distance(const float4 &a, const float4 &b) - { - return (a - b).length(); - } - - static float4 safe_divide(const float4 &a, const float b) - { - return (b != 0.0f) ? a / b : float4(0.0f); - } - - static float4 interpolate(const float4 &a, const float4 &b, float t) - { - return a * (1 - t) + b * t; - } - - static float4 floor(const float4 &a) - { - return float4(floorf(a.x), floorf(a.y), floorf(a.z), floorf(a.w)); - } - - static float4 normalize(const float4 &a) - { - const float t = len_v4(a); - return (t != 0.0f) ? a / t : float4(0.0f); - } -}; - -} // namespace blender diff --git a/source/blender/blenlib/BLI_float4x4.hh b/source/blender/blenlib/BLI_float4x4.hh index b7f839f4ddf..81c969d02d0 100644 --- a/source/blender/blenlib/BLI_float4x4.hh +++ b/source/blender/blenlib/BLI_float4x4.hh @@ -16,8 +16,9 @@ #pragma once -#include "BLI_float3.hh" #include "BLI_math_matrix.h" +#include "BLI_math_vec_types.hh" +#include "BLI_math_vector.h" namespace blender { @@ -63,7 +64,7 @@ struct float4x4 { * Without the negation, the result would be a so called improper rotation. That means it * contains a reflection. Such an improper rotation matrix could not be converted to another * representation of a rotation such as euler angles. */ - const float3 cross = -float3::cross(forward, up); + const float3 cross = -math::cross(forward, up); float4x4 matrix; matrix.values[0][0] = forward.x; diff --git a/source/blender/blenlib/BLI_gsqueue.h b/source/blender/blenlib/BLI_gsqueue.h index 8b32c09b56b..a35c743c80b 100644 --- a/source/blender/blenlib/BLI_gsqueue.h +++ b/source/blender/blenlib/BLI_gsqueue.h @@ -31,7 +31,7 @@ extern "C" { typedef struct _GSQueue GSQueue; -GSQueue *BLI_gsqueue_new(const size_t elem_size); +GSQueue *BLI_gsqueue_new(size_t elem_size); /** * Returns true if the queue is empty, false otherwise. */ diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h index 64852b95ae4..f73d1f22502 100644 --- a/source/blender/blenlib/BLI_listbase.h +++ b/source/blender/blenlib/BLI_listbase.h @@ -85,7 +85,7 @@ void *BLI_findptr(const struct ListBase *listbase, */ void *BLI_listbase_bytes_find(const ListBase *listbase, const void *bytes, - const size_t bytes_size, + size_t bytes_size, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2); /** * Find the first item in the list that matches the given string, or the given index as fallback. @@ -96,7 +96,7 @@ void *BLI_listbase_bytes_find(const ListBase *listbase, */ void *BLI_listbase_string_or_index_find(const struct ListBase *listbase, const char *string, - const size_t string_offset, + size_t string_offset, int index) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1); /* Find backwards. */ @@ -133,7 +133,7 @@ void *BLI_rfindptr(const struct ListBase *listbase, */ void *BLI_listbase_bytes_rfind(const ListBase *listbase, const void *bytes, - const size_t bytes_size, + size_t bytes_size, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2); /** diff --git a/source/blender/blenlib/BLI_math_boolean.hh b/source/blender/blenlib/BLI_math_boolean.hh index 20fd00b2aa4..8cf93c82dec 100644 --- a/source/blender/blenlib/BLI_math_boolean.hh +++ b/source/blender/blenlib/BLI_math_boolean.hh @@ -21,13 +21,11 @@ * \brief Math vector functions needed specifically for mesh intersect and boolean. */ -#include "BLI_double2.hh" -#include "BLI_double3.hh" +#include "BLI_math_vec_types.hh" #ifdef WITH_GMP # include "BLI_math_mpq.hh" -# include "BLI_mpq2.hh" -# include "BLI_mpq3.hh" +# include "BLI_math_vec_mpq_types.hh" #endif namespace blender { diff --git a/source/blender/blenlib/BLI_math_vec_mpq_types.hh b/source/blender/blenlib/BLI_math_vec_mpq_types.hh new file mode 100644 index 00000000000..392c647fe0d --- /dev/null +++ b/source/blender/blenlib/BLI_math_vec_mpq_types.hh @@ -0,0 +1,92 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#pragma once + +/** \file + * \ingroup bli + */ + +#include "BLI_math_vec_types.hh" + +#ifdef WITH_GMP + +# include "BLI_math_mpq.hh" + +namespace blender { + +using mpq2 = vec_base<mpq_class, 2>; +using mpq3 = vec_base<mpq_class, 3>; + +namespace math { + +uint64_t hash_mpq_class(const mpq_class &value); + +template<> inline uint64_t vector_hash(const mpq2 &vec) +{ + return hash_mpq_class(vec.x) ^ (hash_mpq_class(vec.y) * 33); +} + +template<> inline uint64_t vector_hash(const mpq3 &vec) +{ + return hash_mpq_class(vec.x) ^ (hash_mpq_class(vec.y) * 33) ^ (hash_mpq_class(vec.z) * 33 * 37); +} + +/** + * Cannot do this exactly in rational arithmetic! + * Approximate by going in and out of doubles. + */ +template<> inline mpq_class length(const mpq2 &a) +{ + return mpq_class(sqrt(length_squared(a).get_d())); +} + +/** + * Cannot do this exactly in rational arithmetic! + * Approximate by going in and out of doubles. + */ +template<> inline mpq_class length(const mpq3 &a) +{ + return mpq_class(sqrt(length_squared(a).get_d())); +} + +/** + * The buffer avoids allocating a temporary variable. + */ +inline mpq_class distance_squared_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer) +{ + buffer = a; + buffer -= b; + return dot(buffer, buffer); +} + +/** + * The buffer avoids allocating a temporary variable. + */ +inline mpq_class dot_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer) +{ + buffer = a; + buffer *= b; + buffer.x += buffer.y; + buffer.x += buffer.z; + return buffer.x; +} + +} // namespace math + +} // namespace blender + +#endif /* WITH_GMP */ diff --git a/source/blender/blenlib/BLI_math_vec_types.hh b/source/blender/blenlib/BLI_math_vec_types.hh new file mode 100644 index 00000000000..52aacd294e4 --- /dev/null +++ b/source/blender/blenlib/BLI_math_vec_types.hh @@ -0,0 +1,566 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#pragma once + +/** \file + * \ingroup bli + */ + +#include <array> +#include <cmath> +#include <iostream> +#include <type_traits> + +#include "BLI_math_vector.hh" +#include "BLI_utildefines.h" + +namespace blender { + +/* clang-format off */ +template<typename T> +using as_uint_type = std::conditional_t<sizeof(T) == sizeof(uint8_t), uint8_t, + std::conditional_t<sizeof(T) == sizeof(uint16_t), uint16_t, + std::conditional_t<sizeof(T) == sizeof(uint32_t), uint32_t, + std::conditional_t<sizeof(T) == sizeof(uint64_t), uint64_t, void>>>>; +/* clang-format on */ + +template<typename T, int Size> struct vec_struct_base { + std::array<T, Size> values; +}; + +template<typename T> struct vec_struct_base<T, 2> { + T x, y; +}; + +template<typename T> struct vec_struct_base<T, 3> { + T x, y, z; +}; + +template<typename T> struct vec_struct_base<T, 4> { + T x, y, z, w; +}; + +template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> { + + static constexpr int type_length = Size; + + using base_type = T; + using uint_type = vec_base<as_uint_type<T>, Size>; + + vec_base() = default; + + explicit vec_base(uint value) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = static_cast<T>(value); + } + } + + explicit vec_base(int value) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = static_cast<T>(value); + } + } + + explicit vec_base(float value) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = static_cast<T>(value); + } + } + + explicit vec_base(double value) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = static_cast<T>(value); + } + } + +/* Workaround issue with template BLI_ENABLE_IF((Size == 2)) not working. */ +#define BLI_ENABLE_IF_VEC(_size, _test) int S = _size, BLI_ENABLE_IF((S _test)) + + template<BLI_ENABLE_IF_VEC(Size, == 2)> vec_base(T _x, T _y) + { + (*this)[0] = _x; + (*this)[1] = _y; + } + + template<BLI_ENABLE_IF_VEC(Size, == 3)> vec_base(T _x, T _y, T _z) + { + (*this)[0] = _x; + (*this)[1] = _y; + (*this)[2] = _z; + } + + template<BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(T _x, T _y, T _z, T _w) + { + (*this)[0] = _x; + (*this)[1] = _y; + (*this)[2] = _z; + (*this)[3] = _w; + } + + /** Mixed scalar-vector constructors. */ + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 3)> + constexpr vec_base(const vec_base<U, 2> &xy, T z) + : vec_base(static_cast<T>(xy.x), static_cast<T>(xy.y), z) + { + } + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 3)> + constexpr vec_base(T x, const vec_base<U, 2> &yz) + : vec_base(x, static_cast<T>(yz.x), static_cast<T>(yz.y)) + { + } + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> + vec_base(vec_base<U, 3> xyz, T w) + : vec_base( + static_cast<T>(xyz.x), static_cast<T>(xyz.y), static_cast<T>(xyz.z), static_cast<T>(w)) + { + } + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> + vec_base(T x, vec_base<U, 3> yzw) + : vec_base( + static_cast<T>(x), static_cast<T>(yzw.x), static_cast<T>(yzw.y), static_cast<T>(yzw.z)) + { + } + + template<typename U, typename V, BLI_ENABLE_IF_VEC(Size, == 4)> + vec_base(vec_base<U, 2> xy, vec_base<V, 2> zw) + : vec_base( + static_cast<T>(xy.x), static_cast<T>(xy.y), static_cast<T>(zw.x), static_cast<T>(zw.y)) + { + } + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> + vec_base(vec_base<U, 2> xy, T z, T w) + : vec_base(static_cast<T>(xy.x), static_cast<T>(xy.y), static_cast<T>(z), static_cast<T>(w)) + { + } + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> + vec_base(T x, vec_base<U, 2> yz, T w) + : vec_base(static_cast<T>(x), static_cast<T>(yz.x), static_cast<T>(yz.y), static_cast<T>(w)) + { + } + + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> + vec_base(T x, T y, vec_base<U, 2> zw) + : vec_base(static_cast<T>(x), static_cast<T>(y), static_cast<T>(zw.x), static_cast<T>(zw.y)) + { + } + + /** Masking. */ + + template<typename U, int OtherSize, BLI_ENABLE_IF(OtherSize > Size)> + explicit vec_base(const vec_base<U, OtherSize> &other) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = static_cast<T>(other[i]); + } + } + +#undef BLI_ENABLE_IF_VEC + + /** Conversion from pointers (from C-style vectors). */ + + vec_base(const T *ptr) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = ptr[i]; + } + } + + vec_base(const T (*ptr)[Size]) : vec_base(static_cast<const T *>(ptr[0])) + { + } + + /** Conversion from other vector types. */ + + template<typename U> explicit vec_base(const vec_base<U, Size> &vec) + { + for (int i = 0; i < Size; i++) { + (*this)[i] = static_cast<T>(vec[i]); + } + } + + /** C-style pointer dereference. */ + + operator const T *() const + { + return reinterpret_cast<const T *>(this); + } + + operator T *() + { + return reinterpret_cast<T *>(this); + } + + /** Array access. */ + + const T &operator[](int index) const + { + BLI_assert(index >= 0); + BLI_assert(index < Size); + return reinterpret_cast<const T *>(this)[index]; + } + + T &operator[](int index) + { + BLI_assert(index >= 0); + BLI_assert(index < Size); + return reinterpret_cast<T *>(this)[index]; + } + + /** Internal Operators Macro. */ + +#define BLI_INT_OP(_T) template<typename U = _T, BLI_ENABLE_IF((std::is_integral_v<U>))> + +#define BLI_VEC_OP_IMPL(_result, _i, _op) \ + vec_base _result; \ + for (int _i = 0; _i < Size; _i++) { \ + _op; \ + } \ + return _result; + +#define BLI_VEC_OP_IMPL_SELF(_i, _op) \ + for (int _i = 0; _i < Size; _i++) { \ + _op; \ + } \ + return *this; + + /** Arithmetic operators. */ + + friend vec_base operator+(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] + b[i]); + } + + friend vec_base operator+(const vec_base &a, const T &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] + b); + } + + friend vec_base operator+(const T &a, const vec_base &b) + { + return b + a; + } + + vec_base &operator+=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] += b[i]); + } + + vec_base &operator+=(const T &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] += b); + } + + friend vec_base operator-(const vec_base &a) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = -a[i]); + } + + friend vec_base operator-(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] - b[i]); + } + + friend vec_base operator-(const vec_base &a, const T &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] - b); + } + + friend vec_base operator-(const T &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a - b[i]); + } + + vec_base &operator-=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] -= b[i]); + } + + vec_base &operator-=(const T &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] -= b); + } + + friend vec_base operator*(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] * b[i]); + } + + friend vec_base operator*(const vec_base &a, T b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] * b); + } + + friend vec_base operator*(T a, const vec_base &b) + { + return b * a; + } + + vec_base &operator*=(T b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] *= b); + } + + vec_base &operator*=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] *= b[i]); + } + + friend vec_base operator/(const vec_base &a, const vec_base &b) + { + BLI_assert(!math::is_any_zero(b)); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] / b[i]); + } + + friend vec_base operator/(const vec_base &a, T b) + { + BLI_assert(b != T(0)); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] / b); + } + + friend vec_base operator/(T a, const vec_base &b) + { + BLI_assert(!math::is_any_zero(b)); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a / b[i]); + } + + vec_base &operator/=(T b) + { + BLI_assert(b != T(0)); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] /= b); + } + + vec_base &operator/=(const vec_base &b) + { + BLI_assert(!math::is_any_zero(b)); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] /= b[i]); + } + + /** Binary operators. */ + + BLI_INT_OP(T) friend vec_base operator&(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] & b[i]); + } + + BLI_INT_OP(T) friend vec_base operator&(const vec_base &a, T b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] & b); + } + + BLI_INT_OP(T) friend vec_base operator&(T a, const vec_base &b) + { + return b & a; + } + + BLI_INT_OP(T) vec_base &operator&=(T b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] &= b); + } + + BLI_INT_OP(T) vec_base &operator&=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] &= b[i]); + } + + BLI_INT_OP(T) friend vec_base operator|(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] | b[i]); + } + + BLI_INT_OP(T) friend vec_base operator|(const vec_base &a, T b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] | b); + } + + BLI_INT_OP(T) friend vec_base operator|(T a, const vec_base &b) + { + return b | a; + } + + BLI_INT_OP(T) vec_base &operator|=(T b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] |= b); + } + + BLI_INT_OP(T) vec_base &operator|=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] |= b[i]); + } + + BLI_INT_OP(T) friend vec_base operator^(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] ^ b[i]); + } + + BLI_INT_OP(T) friend vec_base operator^(const vec_base &a, T b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] ^ b); + } + + BLI_INT_OP(T) friend vec_base operator^(T a, const vec_base &b) + { + return b ^ a; + } + + BLI_INT_OP(T) vec_base &operator^=(T b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] ^= b); + } + + BLI_INT_OP(T) vec_base &operator^=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] ^= b[i]); + } + + BLI_INT_OP(T) friend vec_base operator~(const vec_base &a) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = ~a[i]); + } + + /** Bit-shift operators. */ + + BLI_INT_OP(T) friend vec_base operator<<(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] << b[i]); + } + + BLI_INT_OP(T) friend vec_base operator<<(const vec_base &a, T b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] << b); + } + + BLI_INT_OP(T) vec_base &operator<<=(T b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] <<= b); + } + + BLI_INT_OP(T) vec_base &operator<<=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] <<= b[i]); + } + + BLI_INT_OP(T) friend vec_base operator>>(const vec_base &a, const vec_base &b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] >> b[i]); + } + + BLI_INT_OP(T) friend vec_base operator>>(const vec_base &a, T b) + { + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] >> b); + } + + BLI_INT_OP(T) vec_base &operator>>=(T b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] >>= b); + } + + BLI_INT_OP(T) vec_base &operator>>=(const vec_base &b) + { + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] >>= b[i]); + } + + /** Modulo operators. */ + + BLI_INT_OP(T) friend vec_base operator%(const vec_base &a, const vec_base &b) + { + BLI_assert(!math::is_any_zero(b)); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] % b[i]); + } + + BLI_INT_OP(T) friend vec_base operator%(const vec_base &a, T b) + { + BLI_assert(b != 0); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] % b); + } + + BLI_INT_OP(T) friend vec_base operator%(T a, const vec_base &b) + { + BLI_assert(!math::is_any_zero(b)); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a % b[i]); + } + +#undef BLI_INT_OP +#undef BLI_VEC_OP_IMPL +#undef BLI_VEC_OP_IMPL_SELF + + /** Compare. */ + + friend bool operator==(const vec_base &a, const vec_base &b) + { + for (int i = 0; i < Size; i++) { + if (a[i] != b[i]) { + return false; + } + } + return true; + } + + friend bool operator!=(const vec_base &a, const vec_base &b) + { + return !(a == b); + } + + /** Misc. */ + + uint64_t hash() const + { + return math::vector_hash(*this); + } + + friend std::ostream &operator<<(std::ostream &stream, const vec_base &v) + { + stream << "("; + for (int i = 0; i < Size; i++) { + stream << v[i]; + if (i != Size - 1) { + stream << ", "; + } + } + stream << ")"; + return stream; + } +}; + +using int2 = vec_base<int32_t, 2>; +using int3 = vec_base<int32_t, 3>; +using int4 = vec_base<int32_t, 4>; + +using uint2 = vec_base<uint32_t, 2>; +using uint3 = vec_base<uint32_t, 3>; +using uint4 = vec_base<uint32_t, 4>; + +using float2 = vec_base<float, 2>; +using float3 = vec_base<float, 3>; +using float4 = vec_base<float, 4>; + +using double2 = vec_base<double, 2>; +using double3 = vec_base<double, 3>; +using double4 = vec_base<double, 4>; + +} // namespace blender diff --git a/source/blender/blenlib/BLI_math_vector.hh b/source/blender/blenlib/BLI_math_vector.hh new file mode 100644 index 00000000000..e7d765df842 --- /dev/null +++ b/source/blender/blenlib/BLI_math_vector.hh @@ -0,0 +1,399 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#pragma once + +/** \file + * \ingroup bli + */ + +#include <cmath> +#include <type_traits> + +#include "BLI_math_base_safe.h" +#include "BLI_math_vector.h" +#include "BLI_span.hh" +#include "BLI_utildefines.h" + +#ifdef WITH_GMP +# include "BLI_math_mpq.hh" +#endif + +namespace blender::math { + +#ifndef NDEBUG +# define BLI_ASSERT_UNIT(v) \ + { \ + const float _test_unit = length_squared(v); \ + BLI_assert(!(std::abs(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON) || \ + !(std::abs(_test_unit) >= BLI_ASSERT_UNIT_EPSILON)); \ + } \ + (void)0 +#else +# define BLI_ASSERT_UNIT(v) (void)(v) +#endif + +#define bT typename T::base_type + +#ifdef WITH_GMP +# define BLI_ENABLE_IF_FLT_VEC(T) \ + BLI_ENABLE_IF((std::is_floating_point_v<typename T::base_type> || \ + std::is_same_v<typename T::base_type, mpq_class>)) +#else +# define BLI_ENABLE_IF_FLT_VEC(T) BLI_ENABLE_IF((std::is_floating_point_v<typename T::base_type>)) +#endif + +#define BLI_ENABLE_IF_INT_VEC(T) BLI_ENABLE_IF((std::is_integral_v<typename T::base_type>)) + +template<typename T> inline bool is_zero(const T &a) +{ + for (int i = 0; i < T::type_length; i++) { + if (a[i] != bT(0)) { + return false; + } + } + return true; +} + +template<typename T> inline bool is_any_zero(const T &a) +{ + for (int i = 0; i < T::type_length; i++) { + if (a[i] == bT(0)) { + return true; + } + } + return false; +} + +template<typename T> inline T abs(const T &a) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = a[i] >= 0 ? a[i] : -a[i]; + } + return result; +} + +template<typename T> inline T min(const T &a, const T &b) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = a[i] < b[i] ? a[i] : b[i]; + } + return result; +} + +template<typename T> inline T max(const T &a, const T &b) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = a[i] > b[i] ? a[i] : b[i]; + } + return result; +} + +template<typename T> inline T clamp(const T &a, const T &min_v, const T &max_v) +{ + T result = a; + for (int i = 0; i < T::type_length; i++) { + CLAMP(result[i], min_v[i], max_v[i]); + } + return result; +} + +template<typename T> inline T clamp(const T &a, const bT &min_v, const bT &max_v) +{ + T result = a; + for (int i = 0; i < T::type_length; i++) { + CLAMP(result[i], min_v, max_v); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T mod(const T &a, const T &b) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + BLI_assert(b[i] != 0); + result[i] = std::fmod(a[i], b[i]); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T mod(const T &a, bT b) +{ + BLI_assert(b != 0); + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = std::fmod(a[i], b); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_mod(const T &a, const T &b) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = (b[i] != 0) ? std::fmod(a[i], b[i]) : 0; + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_mod(const T &a, bT b) +{ + if (b == 0) { + return T(0.0f); + } + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = std::fmod(a[i], b); + } + return result; +} + +template<typename T> inline void min_max(const T &vector, T &min_vec, T &max_vec) +{ + min_vec = min(vector, min_vec); + max_vec = max(vector, max_vec); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_divide(const T &a, const T &b) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = (b[i] == 0) ? 0 : a[i] / b[i]; + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_divide(const T &a, const bT b) +{ + return (b != 0) ? a / b : T(0.0f); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T floor(const T &a) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = std::floor(a[i]); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T ceil(const T &a) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = std::ceil(a[i]); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T fract(const T &a) +{ + T result; + for (int i = 0; i < T::type_length; i++) { + result[i] = a[i] - std::floor(a[i]); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT dot(const T &a, const T &b) +{ + bT result = a[0] * b[0]; + for (int i = 1; i < T::type_length; i++) { + result += a[i] * b[i]; + } + return result; +} + +template<typename T> inline bT length_manhattan(const T &a) +{ + bT result = std::abs(a[0]); + for (int i = 1; i < T::type_length; i++) { + result += std::abs(a[i]); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT length_squared(const T &a) +{ + return dot(a, a); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT length(const T &a) +{ + return std::sqrt(length_squared(a)); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT distance_manhattan(const T &a, const T &b) +{ + return length_manhattan(a - b); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT distance_squared(const T &a, const T &b) +{ + return length_squared(a - b); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT distance(const T &a, const T &b) +{ + return length(a - b); +} + +template<typename T> uint64_t vector_hash(const T &vec) +{ + BLI_STATIC_ASSERT(T::type_length <= 4, "Longer types need to implement vector_hash themself."); + const typename T::uint_type &uvec = *reinterpret_cast<const typename T::uint_type *>(&vec); + uint64_t result; + result = uvec[0] * uint64_t(435109); + if constexpr (T::type_length > 1) { + result ^= uvec[1] * uint64_t(380867); + } + if constexpr (T::type_length > 2) { + result ^= uvec[2] * uint64_t(1059217); + } + if constexpr (T::type_length > 3) { + result ^= uvec[3] * uint64_t(2002613); + } + return result; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T reflect(const T &incident, const T &normal) +{ + BLI_ASSERT_UNIT(normal); + return incident - 2.0 * dot(normal, incident) * normal; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> +inline T refract(const T &incident, const T &normal, const bT eta) +{ + float dot_ni = dot(normal, incident); + float k = 1.0f - eta * eta * (1.0f - dot_ni * dot_ni); + if (k < 0.0f) { + return T(0.0f); + } + return eta * incident - (eta * dot_ni + sqrt(k)) * normal; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T project(const T &p, const T &v_proj) +{ + if (UNLIKELY(is_zero(v_proj))) { + return T(0.0f); + } + return v_proj * (dot(p, v_proj) / dot(v_proj, v_proj)); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> +inline T normalize_and_get_length(const T &v, bT &out_length) +{ + out_length = length_squared(v); + /* A larger value causes normalize errors in a scaled down models with camera extreme close. */ + constexpr bT threshold = std::is_same_v<bT, double> ? 1.0e-70 : 1.0e-35f; + if (out_length > threshold) { + out_length = sqrt(out_length); + return v / out_length; + } + /* Either the vector is small or one of it's values contained `nan`. */ + out_length = 0.0; + return T(0.0); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T normalize(const T &v) +{ + bT len; + return normalize_and_get_length(v, len); +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T), BLI_ENABLE_IF((T::type_length == 3))> +inline T cross(const T &a, const T &b) +{ + return {a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x}; +} + +template<typename T, + BLI_ENABLE_IF((std::is_same_v<bT, float>)), + BLI_ENABLE_IF((T::type_length == 3))> +inline T cross_high_precision(const T &a, const T &b) +{ + return {(float)((double)a.y * b.z - (double)a.z * b.y), + (float)((double)a.z * b.x - (double)a.x * b.z), + (float)((double)a.x * b.y - (double)a.y * b.x)}; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T), BLI_ENABLE_IF((T::type_length == 3))> +inline T cross_poly(Span<T> poly) +{ + /* Newell's Method. */ + int nv = static_cast<int>(poly.size()); + if (nv < 3) { + return T(0, 0, 0); + } + const T *v_prev = &poly[nv - 1]; + const T *v_curr = &poly[0]; + T n(0, 0, 0); + for (int i = 0; i < nv;) { + n[0] = n[0] + ((*v_prev)[1] - (*v_curr)[1]) * ((*v_prev)[2] + (*v_curr)[2]); + n[1] = n[1] + ((*v_prev)[2] - (*v_curr)[2]) * ((*v_prev)[0] + (*v_curr)[0]); + n[2] = n[2] + ((*v_prev)[0] - (*v_curr)[0]) * ((*v_prev)[1] + (*v_curr)[1]); + v_prev = v_curr; + ++i; + if (i < nv) { + v_curr = &poly[i]; + } + } + return n; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T interpolate(const T &a, const T &b, bT t) +{ + return a * (1 - t) + b * t; +} + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> +inline T faceforward(const T &vector, const T &incident, const T &reference) +{ + return (dot(reference, incident) < 0) ? vector : -vector; +} + +template<typename T> inline int dominant_axis(const T &a) +{ + T b = abs(a); + return ((b.x > b.y) ? ((b.x > b.z) ? 0 : 2) : ((b.y > b.z) ? 1 : 2)); +} + +/** Intersections. */ + +template<typename T> struct isect_result { + enum { + LINE_LINE_COLINEAR = -1, + LINE_LINE_NONE = 0, + LINE_LINE_EXACT = 1, + LINE_LINE_CROSS = 2, + } kind; + bT lambda; +}; + +template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> +isect_result<T> isect_seg_seg(const T &v1, const T &v2, const T &v3, const T &v4); + +#undef BLI_ENABLE_IF_FLT_VEC +#undef BLI_ENABLE_IF_INT_VEC +#undef bT + +} // namespace blender::math diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h index 4ac4712bc8c..bcfe2efc5e5 100644 --- a/source/blender/blenlib/BLI_memarena.h +++ b/source/blender/blenlib/BLI_memarena.h @@ -38,13 +38,13 @@ extern "C" { struct MemArena; typedef struct MemArena MemArena; -struct MemArena *BLI_memarena_new(const size_t bufsize, +struct MemArena *BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC; void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1); void BLI_memarena_use_malloc(struct MemArena *ma) ATTR_NONNULL(1); void BLI_memarena_use_calloc(struct MemArena *ma) ATTR_NONNULL(1); -void BLI_memarena_use_align(struct MemArena *ma, const size_t align) ATTR_NONNULL(1); +void BLI_memarena_use_align(struct MemArena *ma, size_t align) ATTR_NONNULL(1); void *BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2); void *BLI_memarena_calloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT diff --git a/source/blender/blenlib/BLI_memory_utils.h b/source/blender/blenlib/BLI_memory_utils.h index 79e25e26040..09d8f646905 100644 --- a/source/blender/blenlib/BLI_memory_utils.h +++ b/source/blender/blenlib/BLI_memory_utils.h @@ -29,7 +29,7 @@ extern "C" { /* it may be defined already */ #ifndef __BLI_UTILDEFINES_H__ -bool BLI_memory_is_zero(const void *arr, const size_t size); +bool BLI_memory_is_zero(const void *arr, size_t size); #endif #ifdef __cplusplus diff --git a/source/blender/blenlib/BLI_memory_utils.hh b/source/blender/blenlib/BLI_memory_utils.hh index 37691017c12..9a5be79b61e 100644 --- a/source/blender/blenlib/BLI_memory_utils.hh +++ b/source/blender/blenlib/BLI_memory_utils.hh @@ -557,13 +557,4 @@ Container &move_assign_container(Container &dst, Container &&src) noexcept( return dst; } -/** - * Utility macro that wraps `std::enable_if` to make it a bit easier to use and less verbose for - * SFINAE in common cases. - * - * \note Often one has to invoke this macro with double parenthesis. That's because the condition - * often contains a comma and angle brackets are not recognized as parenthesis by the preprocessor. - */ -#define BLI_ENABLE_IF(condition) typename std::enable_if_t<condition> * = nullptr - } // namespace blender diff --git a/source/blender/blenlib/BLI_mesh_intersect.hh b/source/blender/blenlib/BLI_mesh_intersect.hh index 71a8abb822f..0ebee6f16a8 100644 --- a/source/blender/blenlib/BLI_mesh_intersect.hh +++ b/source/blender/blenlib/BLI_mesh_intersect.hh @@ -28,12 +28,11 @@ # include <iostream> # include "BLI_array.hh" -# include "BLI_double3.hh" -# include "BLI_float3.hh" # include "BLI_index_range.hh" # include "BLI_map.hh" # include "BLI_math_mpq.hh" -# include "BLI_mpq3.hh" +# include "BLI_math_vec_mpq_types.hh" +# include "BLI_math_vec_types.hh" # include "BLI_span.hh" # include "BLI_utility_mixins.hh" # include "BLI_vector.hh" diff --git a/source/blender/blenlib/BLI_mpq2.hh b/source/blender/blenlib/BLI_mpq2.hh deleted file mode 100644 index 18bc8821d9c..00000000000 --- a/source/blender/blenlib/BLI_mpq2.hh +++ /dev/null @@ -1,184 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -/** \file - * \ingroup bli - */ - -#ifdef WITH_GMP - -# include "BLI_math_mpq.hh" -# include "BLI_mpq3.hh" - -namespace blender { - -struct mpq2 { - mpq_class x, y; - - mpq2() = default; - - mpq2(const mpq_class *ptr) : x{ptr[0]}, y{ptr[1]} - { - } - - mpq2(mpq_class x, mpq_class y) : x(x), y(y) - { - } - - mpq2(const mpq2 &other) : x(other.x), y(other.y) - { - } - - mpq2(mpq2 &&other) noexcept : x(std::move(other.x)), y(std::move(other.y)) - { - } - - ~mpq2() = default; - - mpq2 &operator=(const mpq2 &other) - { - if (this != &other) { - x = other.x; - y = other.y; - } - return *this; - } - - mpq2 &operator=(mpq2 &&other) noexcept - { - x = std::move(other.x); - y = std::move(other.y); - return *this; - } - - mpq2(const mpq3 &other) : x(other.x), y(other.y) - { - } - - operator mpq_class *() - { - return &x; - } - - operator const mpq_class *() const - { - return &x; - } - - /** - * Cannot do this exactly in rational arithmetic! - * Approximate by going in and out of doubles. - */ - mpq_class length() const - { - mpq_class lsquared = dot(*this, *this); - return mpq_class(sqrt(lsquared.get_d())); - } - - friend mpq2 operator+(const mpq2 &a, const mpq2 &b) - { - return {a.x + b.x, a.y + b.y}; - } - - friend mpq2 operator-(const mpq2 &a, const mpq2 &b) - { - return {a.x - b.x, a.y - b.y}; - } - - friend mpq2 operator*(const mpq2 &a, mpq_class b) - { - return {a.x * b, a.y * b}; - } - - friend mpq2 operator/(const mpq2 &a, mpq_class b) - { - BLI_assert(b != 0); - return {a.x / b, a.y / b}; - } - - friend mpq2 operator*(mpq_class a, const mpq2 &b) - { - return b * a; - } - - friend bool operator==(const mpq2 &a, const mpq2 &b) - { - return a.x == b.x && a.y == b.y; - } - - friend bool operator!=(const mpq2 &a, const mpq2 &b) - { - return a.x != b.x || a.y != b.y; - } - - friend std::ostream &operator<<(std::ostream &stream, const mpq2 &v) - { - stream << "(" << v.x << ", " << v.y << ")"; - return stream; - } - - static mpq_class dot(const mpq2 &a, const mpq2 &b) - { - return a.x * b.x + a.y * b.y; - } - - static mpq2 interpolate(const mpq2 &a, const mpq2 &b, mpq_class t) - { - return a * (1 - t) + b * t; - } - - static mpq2 abs(const mpq2 &a) - { - mpq_class abs_x = (a.x >= 0) ? a.x : -a.x; - mpq_class abs_y = (a.y >= 0) ? a.y : -a.y; - return mpq2(abs_x, abs_y); - } - - static mpq_class distance(const mpq2 &a, const mpq2 &b) - { - return (a - b).length(); - } - - static mpq_class distance_squared(const mpq2 &a, const mpq2 &b) - { - mpq2 diff = a - b; - return dot(diff, diff); - } - - struct isect_result { - enum { - LINE_LINE_COLINEAR = -1, - LINE_LINE_NONE = 0, - LINE_LINE_EXACT = 1, - LINE_LINE_CROSS = 2, - } kind; - mpq_class lambda; - }; - - static isect_result isect_seg_seg(const mpq2 &v1, - const mpq2 &v2, - const mpq2 &v3, - const mpq2 &v4); - - /** There is a sensible use for hashing on exact arithmetic types. */ - uint64_t hash() const; -}; - -} // namespace blender - -#endif /* WITH_GMP */ diff --git a/source/blender/blenlib/BLI_mpq3.hh b/source/blender/blenlib/BLI_mpq3.hh deleted file mode 100644 index b9eda2ad7e1..00000000000 --- a/source/blender/blenlib/BLI_mpq3.hh +++ /dev/null @@ -1,297 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#pragma once - -/** \file - * \ingroup bli - */ - -#ifdef WITH_GMP - -# include <iostream> - -# include "BLI_math.h" -# include "BLI_math_mpq.hh" -# include "BLI_span.hh" - -namespace blender { - -struct mpq3 { - mpq_class x, y, z; - - mpq3() = default; - - mpq3(const mpq_class *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]} - { - } - - mpq3(const mpq_class (*ptr)[3]) : mpq3((const mpq_class *)ptr) - { - } - - explicit mpq3(mpq_class value) : x(value), y(value), z(value) - { - } - - explicit mpq3(int value) : x(value), y(value), z(value) - { - } - - mpq3(mpq_class x, mpq_class y, mpq_class z) : x{x}, y{y}, z{z} - { - } - - operator const mpq_class *() const - { - return &x; - } - - operator mpq_class *() - { - return &x; - } - - /* Cannot do this exactly in rational arithmetic! - * Approximate by going in and out of doubles. - */ - mpq_class normalize_and_get_length() - { - double dv[3] = {x.get_d(), y.get_d(), z.get_d()}; - double len = normalize_v3_db(dv); - this->x = mpq_class(dv[0]); - this->y = mpq_class(dv[1]); - this->z = mpq_class(dv[2]); - return len; - } - - mpq3 normalized() const - { - double dv[3] = {x.get_d(), y.get_d(), z.get_d()}; - double dr[3]; - normalize_v3_v3_db(dr, dv); - return mpq3(mpq_class(dr[0]), mpq_class(dr[1]), mpq_class(dr[2])); - } - - /* Cannot do this exactly in rational arithmetic! - * Approximate by going in and out of double. - */ - mpq_class length() const - { - mpq_class lsquared = this->length_squared(); - double dsquared = lsquared.get_d(); - double d = sqrt(dsquared); - return mpq_class(d); - } - - mpq_class length_squared() const - { - return x * x + y * y + z * z; - } - - void reflect(const mpq3 &normal) - { - *this = this->reflected(normal); - } - - mpq3 reflected(const mpq3 &normal) const - { - mpq3 result; - const mpq_class dot2 = 2 * dot(*this, normal); - result.x = this->x - (dot2 * normal.x); - result.y = this->y - (dot2 * normal.y); - result.z = this->z - (dot2 * normal.z); - return result; - } - - static mpq3 safe_divide(const mpq3 &a, const mpq3 &b) - { - mpq3 result; - result.x = (b.x == 0) ? mpq_class(0) : a.x / b.x; - result.y = (b.y == 0) ? mpq_class(0) : a.y / b.y; - result.z = (b.z == 0) ? mpq_class(0) : a.z / b.z; - return result; - } - - void invert() - { - x = -x; - y = -y; - z = -z; - } - - friend mpq3 operator+(const mpq3 &a, const mpq3 &b) - { - return mpq3(a.x + b.x, a.y + b.y, a.z + b.z); - } - - void operator+=(const mpq3 &b) - { - this->x += b.x; - this->y += b.y; - this->z += b.z; - } - - friend mpq3 operator-(const mpq3 &a, const mpq3 &b) - { - return mpq3(a.x - b.x, a.y - b.y, a.z - b.z); - } - - friend mpq3 operator-(const mpq3 &a) - { - return mpq3(-a.x, -a.y, -a.z); - } - - void operator-=(const mpq3 &b) - { - this->x -= b.x; - this->y -= b.y; - this->z -= b.z; - } - - void operator*=(mpq_class scalar) - { - this->x *= scalar; - this->y *= scalar; - this->z *= scalar; - } - - void operator*=(const mpq3 &other) - { - this->x *= other.x; - this->y *= other.y; - this->z *= other.z; - } - - friend mpq3 operator*(const mpq3 &a, const mpq3 &b) - { - return {a.x * b.x, a.y * b.y, a.z * b.z}; - } - - friend mpq3 operator*(const mpq3 &a, const mpq_class &b) - { - return mpq3(a.x * b, a.y * b, a.z * b); - } - - friend mpq3 operator*(const mpq_class &a, const mpq3 &b) - { - return mpq3(a * b.x, a * b.y, a * b.z); - } - - friend mpq3 operator/(const mpq3 &a, const mpq_class &b) - { - BLI_assert(b != 0); - return mpq3(a.x / b, a.y / b, a.z / b); - } - - friend bool operator==(const mpq3 &a, const mpq3 &b) - { - return a.x == b.x && a.y == b.y && a.z == b.z; - } - - friend bool operator!=(const mpq3 &a, const mpq3 &b) - { - return a.x != b.x || a.y != b.y || a.z != b.z; - } - - friend std::ostream &operator<<(std::ostream &stream, const mpq3 &v) - { - stream << "(" << v.x << ", " << v.y << ", " << v.z << ")"; - return stream; - } - - static mpq_class dot(const mpq3 &a, const mpq3 &b) - { - return a.x * b.x + a.y * b.y + a.z * b.z; - } - - static mpq_class dot_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer) - { - buffer = a; - buffer *= b; - buffer.x += buffer.y; - buffer.x += buffer.z; - return buffer.x; - } - - static mpq3 cross(const mpq3 &a, const mpq3 &b) - { - return mpq3(a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]); - } - - static mpq3 cross_high_precision(const mpq3 &a, const mpq3 &b) - { - return cross(a, b); - } - - static mpq3 project(const mpq3 &a, const mpq3 &b) - { - const mpq_class mul = mpq3::dot(a, b) / mpq3::dot(b, b); - return mpq3(mul * b[0], mul * b[1], mul * b[2]); - } - - static mpq_class distance(const mpq3 &a, const mpq3 &b) - { - mpq3 diff(a.x - b.x, a.y - b.y, a.z - b.z); - return diff.length(); - } - - static mpq_class distance_squared(const mpq3 &a, const mpq3 &b) - { - mpq3 diff(a.x - b.x, a.y - b.y, a.z - b.z); - return mpq3::dot(diff, diff); - } - - static mpq_class distance_squared_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer) - { - buffer = a; - buffer -= b; - return mpq3::dot(buffer, buffer); - } - - static mpq3 interpolate(const mpq3 &a, const mpq3 &b, mpq_class t) - { - mpq_class s = 1 - t; - return mpq3(a.x * s + b.x * t, a.y * s + b.y * t, a.z * s + b.z * t); - } - - static mpq3 abs(const mpq3 &a) - { - mpq_class abs_x = (a.x >= 0) ? a.x : -a.x; - mpq_class abs_y = (a.y >= 0) ? a.y : -a.y; - mpq_class abs_z = (a.z >= 0) ? a.z : -a.z; - return mpq3(abs_x, abs_y, abs_z); - } - - static int dominant_axis(const mpq3 &a) - { - mpq_class x = (a.x >= 0) ? a.x : -a.x; - mpq_class y = (a.y >= 0) ? a.y : -a.y; - mpq_class z = (a.z >= 0) ? a.z : -a.z; - return ((x > y) ? ((x > z) ? 0 : 2) : ((y > z) ? 1 : 2)); - } - - static mpq3 cross_poly(Span<mpq3> poly); - - /** There is a sensible use for hashing on exact arithmetic types. */ - uint64_t hash() const; -}; - -uint64_t hash_mpq_class(const mpq_class &value); - -} // namespace blender - -#endif /* WITH_GMP */ diff --git a/source/blender/blenlib/BLI_noise.hh b/source/blender/blenlib/BLI_noise.hh index 4f68ef17ca2..297c65c250a 100644 --- a/source/blender/blenlib/BLI_noise.hh +++ b/source/blender/blenlib/BLI_noise.hh @@ -16,9 +16,7 @@ #pragma once -#include "BLI_float2.hh" -#include "BLI_float3.hh" -#include "BLI_float4.hh" +#include "BLI_math_vec_types.hh" namespace blender::noise { diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h index 16f479cb3b8..658cc0c3825 100644 --- a/source/blender/blenlib/BLI_path_util.h +++ b/source/blender/blenlib/BLI_path_util.h @@ -75,16 +75,15 @@ bool BLI_make_existing_file(const char *name); * - Doesn't use CWD, or deal with relative paths. * - Only fill's in \a dir and \a file when they are non NULL. */ -void BLI_split_dirfile( - const char *string, char *dir, char *file, const size_t dirlen, const size_t filelen); +void BLI_split_dirfile(const char *string, char *dir, char *file, size_t dirlen, size_t filelen); /** * Copies the parent directory part of string into `dir`, max length `dirlen`. */ -void BLI_split_dir_part(const char *string, char *dir, const size_t dirlen); +void BLI_split_dir_part(const char *string, char *dir, size_t dirlen); /** * Copies the leaf filename part of string into `file`, max length `filelen`. */ -void BLI_split_file_part(const char *string, char *file, const size_t filelen); +void BLI_split_file_part(const char *string, char *file, size_t filelen); /** * Returns a pointer to the last extension (e.g. the position of the last period). * Returns NULL if there is no extension. @@ -94,7 +93,7 @@ const char *BLI_path_extension(const char *filepath) ATTR_NONNULL(); /** * Append a filename to a dir, ensuring slash separates. */ -void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__restrict file) +void BLI_path_append(char *__restrict dst, size_t maxlen, const char *__restrict file) ATTR_NONNULL(); /** * Simple appending of filename to dir, does not check for valid path! @@ -104,7 +103,7 @@ void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__re * that de-duplicates separators and can handle an arbitrary number of paths. */ void BLI_join_dirfile(char *__restrict dst, - const size_t maxlen, + size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL(); /** @@ -114,7 +113,7 @@ void BLI_join_dirfile(char *__restrict dst, * \note If you want a trailing slash, add `SEP_STR` as the last path argument, * duplicate slashes will be cleaned up. */ -size_t BLI_path_join(char *__restrict dst, const size_t dst_len, const char *path_first, ...) +size_t BLI_path_join(char *__restrict dst, size_t dst_len, const char *path_first, ...) ATTR_NONNULL(1, 3) ATTR_SENTINEL(0); /** * Like Python's `os.path.basename()` @@ -164,12 +163,12 @@ void BLI_path_slash_rstrip(char *string) ATTR_NONNULL(); void BLI_path_slash_native(char *path) ATTR_NONNULL(); #ifdef _WIN32 -bool BLI_path_program_extensions_add_win32(char *name, const size_t maxlen); +bool BLI_path_program_extensions_add_win32(char *name, size_t maxlen); #endif /** * Search for a binary (executable) */ -bool BLI_path_program_search(char *fullname, const size_t maxlen, const char *name); +bool BLI_path_program_search(char *fullname, size_t maxlen, const char *name); /** * \return true when `str` end with `ext` (case insensitive). @@ -353,7 +352,7 @@ bool BLI_path_is_abs_from_cwd(const char *path) ATTR_NONNULL(); * This is _not_ something Blender's internal paths support, instead they use the "//" prefix. * In most cases #BLI_path_abs should be used instead. */ -bool BLI_path_abs_from_cwd(char *path, const size_t maxlen) ATTR_NONNULL(); +bool BLI_path_abs_from_cwd(char *path, size_t maxlen) ATTR_NONNULL(); /** * Replaces `file` with a relative version (prefixed by "//") such that #BLI_path_abs, given * the same `relfile`, will convert it back to its original value. diff --git a/source/blender/blenlib/BLI_rand.hh b/source/blender/blenlib/BLI_rand.hh index cc9e9b374d7..667d6df8996 100644 --- a/source/blender/blenlib/BLI_rand.hh +++ b/source/blender/blenlib/BLI_rand.hh @@ -20,9 +20,8 @@ #pragma once -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "BLI_utildefines.h" diff --git a/source/blender/blenlib/BLI_stack.h b/source/blender/blenlib/BLI_stack.h index 653f5f61c9e..eb4e69a42d4 100644 --- a/source/blender/blenlib/BLI_stack.h +++ b/source/blender/blenlib/BLI_stack.h @@ -28,13 +28,13 @@ extern "C" { typedef struct BLI_Stack BLI_Stack; -BLI_Stack *BLI_stack_new_ex(const size_t elem_size, +BLI_Stack *BLI_stack_new_ex(size_t elem_size, const char *description, - const size_t chunk_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); + size_t chunk_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); /** * Create a new homogeneous stack with elements of 'elem_size' bytes. */ -BLI_Stack *BLI_stack_new(const size_t elem_size, const char *description) ATTR_WARN_UNUSED_RESULT +BLI_Stack *BLI_stack_new(size_t elem_size, const char *description) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); /** diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h index a82e97914db..8177545911c 100644 --- a/source/blender/blenlib/BLI_string.h +++ b/source/blender/blenlib/BLI_string.h @@ -42,8 +42,7 @@ extern "C" { * \param len: The number of bytes to duplicate * \retval Returns the duplicated string */ -char *BLI_strdupn(const char *str, const size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT - ATTR_NONNULL(); +char *BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); /** * Duplicates the cstring \a str into a newly mallocN'd @@ -74,8 +73,7 @@ char *BLI_strdupcat(const char *__restrict str1, * the size of dst) * \retval Returns dst */ -char *BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) - ATTR_NONNULL(); +char *BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL(); /** * Like BLI_strncpy but ensures dst is always padded by given char, @@ -107,7 +105,7 @@ char *BLI_strncpy_ensure_pad(char *__restrict dst, */ size_t BLI_strncpy_rlen(char *__restrict dst, const char *__restrict src, - const size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); + size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); size_t BLI_strcpy_rlen(char *__restrict dst, const char *__restrict src) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); @@ -186,7 +184,7 @@ void BLI_str_replace_char(char *str, char src, char dst) ATTR_NONNULL(); * \note Larger tables should use a hash table. */ bool BLI_str_replace_table_exact(char *string, - const size_t string_len, + size_t string_len, const char *replace_table[][2], int replace_table_len); @@ -235,7 +233,7 @@ char *BLI_sprintfN(const char *__restrict format, ...) ATTR_WARN_UNUSED_RESULT * * \note This is used for creating animation paths in blend files. */ -size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const size_t dst_maxncpy) +size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(); /** * This roughly matches C and Python's string escaping with double quotes - `"`. @@ -251,9 +249,9 @@ size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const si */ size_t BLI_str_unescape_ex(char *__restrict dst, const char *__restrict src, - const size_t src_maxncpy, + size_t src_maxncpy, /* Additional arguments. */ - const size_t dst_maxncpy, + size_t dst_maxncpy, bool *r_is_complete) ATTR_NONNULL(); /** * See #BLI_str_unescape_ex doc-string. @@ -265,7 +263,7 @@ size_t BLI_str_unescape_ex(char *__restrict dst, * * \note This is used for parsing animation paths in blend files (runs often). */ -size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, const size_t src_maxncpy) +size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, size_t src_maxncpy) ATTR_NONNULL(); /** @@ -359,10 +357,10 @@ int BLI_strcmp_ignore_pad(const char *str1, const char *str2, char pad) ATTR_WAR /** * Determine the length of a fixed-size string. */ -size_t BLI_strnlen(const char *str, const size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); +size_t BLI_strnlen(const char *str, size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); -void BLI_str_tolower_ascii(char *str, const size_t len) ATTR_NONNULL(); -void BLI_str_toupper_ascii(char *str, const size_t len) ATTR_NONNULL(); +void BLI_str_tolower_ascii(char *str, size_t len) ATTR_NONNULL(); +void BLI_str_toupper_ascii(char *str, size_t len) ATTR_NONNULL(); /** * Strip white-space from end of the string. */ @@ -479,7 +477,7 @@ bool BLI_string_all_words_matched(const char *name, * \return The number of words found in \a str */ int BLI_string_find_split_words(const char *str, - const size_t len, + size_t len, char delim, int r_words[][2], int words_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); diff --git a/source/blender/blenlib/BLI_string_utf8.h b/source/blender/blenlib/BLI_string_utf8.h index 82622d442fb..108a2f5fc7d 100644 --- a/source/blender/blenlib/BLI_string_utf8.h +++ b/source/blender/blenlib/BLI_string_utf8.h @@ -110,14 +110,12 @@ size_t BLI_str_utf8_from_unicode_len(unsigned int c) ATTR_WARN_UNUSED_RESULT; * * \return number of bytes written. */ -size_t BLI_str_utf8_from_unicode(unsigned int c, char *outbuf, const size_t outbuf_len) - ATTR_NONNULL(2); +size_t BLI_str_utf8_from_unicode(unsigned int c, char *outbuf, size_t outbuf_len) ATTR_NONNULL(2); size_t BLI_str_utf8_as_utf32(char32_t *__restrict dst_w, const char *__restrict src_c, - const size_t maxncpy) ATTR_NONNULL(1, 2); -size_t BLI_str_utf32_as_utf8(char *__restrict dst, - const char32_t *__restrict src, - const size_t maxncpy) ATTR_NONNULL(1, 2); + size_t maxncpy) ATTR_NONNULL(1, 2); +size_t BLI_str_utf32_as_utf8(char *__restrict dst, const char32_t *__restrict src, size_t maxncpy) + ATTR_NONNULL(1, 2); /** * \return The UTF-32 len in UTF-8. */ @@ -162,21 +160,20 @@ size_t BLI_wstrlen_utf8(const wchar_t *src) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RES size_t BLI_strlen_utf8_ex(const char *strc, size_t *r_len_bytes) ATTR_NONNULL(1, 2) ATTR_WARN_UNUSED_RESULT; size_t BLI_strlen_utf8(const char *strc) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT; -size_t BLI_strnlen_utf8_ex(const char *strc, const size_t maxlen, size_t *r_len_bytes) +size_t BLI_strnlen_utf8_ex(const char *strc, size_t maxlen, size_t *r_len_bytes) ATTR_NONNULL(1, 3); /** * \param strc: the string to measure the length. * \param maxlen: the string length (in bytes) * \return the unicode length (not in bytes!) */ -size_t BLI_strnlen_utf8(const char *strc, const size_t maxlen) - ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT; +size_t BLI_strnlen_utf8(const char *strc, size_t maxlen) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT; size_t BLI_strncpy_wchar_as_utf8(char *__restrict dst, const wchar_t *__restrict src, - const size_t maxncpy) ATTR_NONNULL(1, 2); + size_t maxncpy) ATTR_NONNULL(1, 2); size_t BLI_strncpy_wchar_from_utf8(wchar_t *__restrict dst, const char *__restrict src, - const size_t maxncpy) ATTR_NONNULL(1, 2); + size_t maxncpy) ATTR_NONNULL(1, 2); /** * Count columns that character/string occupies (based on `wcwidth.co`). diff --git a/source/blender/blenlib/BLI_string_utils.h b/source/blender/blenlib/BLI_string_utils.h index fd3918ff217..818bfe8182b 100644 --- a/source/blender/blenlib/BLI_string_utils.h +++ b/source/blender/blenlib/BLI_string_utils.h @@ -57,11 +57,11 @@ bool BLI_string_is_decimal(const char *string) ATTR_NONNULL(); * Based on `BLI_split_dirfile()` / `os.path.splitext()`, * `"a.b.c"` -> (`"a.b"`, `".c"`). */ -void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, const size_t str_len); +void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, size_t str_len); /** * `"a.b.c"` -> (`"a."`, `"b.c"`). */ -void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, const size_t str_len); +void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, size_t str_len); /** * Join strings, return newly allocated string. @@ -127,7 +127,7 @@ char *BLI_string_join_array_by_sep_char_with_tableN(char sep, size_t BLI_string_flip_side_name(char *r_name, const char *from_name, bool strip_number, - const size_t name_len); + size_t name_len); /** * Ensures name is unique (according to criteria specified by caller in unique_check callback), diff --git a/source/blender/blenlib/BLI_timecode.h b/source/blender/blenlib/BLI_timecode.h index f0349e289ac..1cd18dc86ab 100644 --- a/source/blender/blenlib/BLI_timecode.h +++ b/source/blender/blenlib/BLI_timecode.h @@ -42,7 +42,7 @@ extern "C" { * \return length of \a str */ size_t BLI_timecode_string_from_time(char *str, - const size_t maxncpy, + size_t maxncpy, int brevity_level, float time_seconds, double fps, @@ -56,7 +56,7 @@ size_t BLI_timecode_string_from_time(char *str, * \param time_seconds: time total time in seconds * \return length of \a str */ -size_t BLI_timecode_string_from_time_simple(char *str, const size_t maxncpy, double time_seconds) +size_t BLI_timecode_string_from_time_simple(char *str, size_t maxncpy, double time_seconds) ATTR_NONNULL(); /** @@ -72,7 +72,7 @@ size_t BLI_timecode_string_from_time_simple(char *str, const size_t maxncpy, dou * \note in some cases this is used to print non-seconds values. */ size_t BLI_timecode_string_from_time_seconds(char *str, - const size_t maxncpy, + size_t maxncpy, int brevity_level, float time_seconds) ATTR_NONNULL(); diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index b902458bd0b..c4b31810669 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -638,7 +638,7 @@ extern "C" { /** * Check if memory is zeroed, as with `memset(arr, 0, arr_size)`. */ -extern bool BLI_memory_is_zero(const void *arr, const size_t arr_size); +extern bool BLI_memory_is_zero(const void *arr, size_t arr_size); #endif #define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member) \ @@ -840,6 +840,15 @@ extern bool BLI_memory_is_zero(const void *arr, const size_t arr_size); /** No-op for expressions we don't want to instantiate, but must remain valid. */ #define EXPR_NOP(expr) (void)(0 ? ((void)(expr), 1) : 0) +/** + * Utility macro that wraps `std::enable_if` to make it a bit easier to use and less verbose for + * SFINAE in common cases. + * + * \note Often one has to invoke this macro with double parenthesis. That's because the condition + * often contains a comma and angle brackets are not recognized as parenthesis by the preprocessor. + */ +#define BLI_ENABLE_IF(condition) typename std::enable_if_t<(condition)> * = nullptr + /** \} */ #ifdef __cplusplus diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 3958fd8e2d2..90c6760019a 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -192,8 +192,6 @@ set(SRC BLI_dlrbTree.h BLI_dot_export.hh BLI_dot_export_attribute_enums.hh - BLI_double2.hh - BLI_double3.hh BLI_dynlib.h BLI_dynstr.h BLI_easing.h @@ -207,9 +205,6 @@ set(SRC BLI_fileops.hh BLI_fileops_types.h BLI_filereader.h - BLI_float2.hh - BLI_float3.hh - BLI_float4.hh BLI_float4x4.hh BLI_fnmatch.h BLI_function_ref.hh @@ -258,6 +253,8 @@ set(SRC BLI_math_statistics.h BLI_math_time.h BLI_math_vector.h + BLI_math_vec_types.hh + BLI_math_vec_mpq_types.hh BLI_memarena.h BLI_memblock.h BLI_memiter.h @@ -267,8 +264,6 @@ set(SRC BLI_mesh_boolean.hh BLI_mesh_intersect.hh BLI_mmap.h - BLI_mpq2.hh - BLI_mpq3.hh BLI_multi_value_map.hh BLI_noise.h BLI_noise.hh @@ -444,6 +439,7 @@ if(WITH_GTESTS) tests/BLI_math_rotation_test.cc tests/BLI_math_solvers_test.cc tests/BLI_math_time_test.cc + tests/BLI_math_vec_types_test.cc tests/BLI_math_vector_test.cc tests/BLI_memiter_test.cc tests/BLI_memory_utils_test.cc diff --git a/source/blender/blenlib/intern/BLI_mempool_private.h b/source/blender/blenlib/intern/BLI_mempool_private.h index 90569d87c41..03b0b11297b 100644 --- a/source/blender/blenlib/intern/BLI_mempool_private.h +++ b/source/blender/blenlib/intern/BLI_mempool_private.h @@ -54,8 +54,9 @@ typedef struct ParallelMempoolTaskData { * * See #BLI_task_parallel_mempool implementation for detailed usage example. */ -ParallelMempoolTaskData *mempool_iter_threadsafe_create(BLI_mempool *pool, const size_t num_iter) - ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); +ParallelMempoolTaskData *mempool_iter_threadsafe_create(BLI_mempool *pool, + size_t num_iter) ATTR_WARN_UNUSED_RESULT + ATTR_NONNULL(); void mempool_iter_threadsafe_destroy(ParallelMempoolTaskData *iter_arr) ATTR_NONNULL(); /** diff --git a/source/blender/blenlib/intern/delaunay_2d.cc b/source/blender/blenlib/intern/delaunay_2d.cc index 53e881a9fc7..842e6cb6135 100644 --- a/source/blender/blenlib/intern/delaunay_2d.cc +++ b/source/blender/blenlib/intern/delaunay_2d.cc @@ -25,11 +25,10 @@ #include <sstream> #include "BLI_array.hh" -#include "BLI_double2.hh" #include "BLI_linklist.h" #include "BLI_math_boolean.hh" #include "BLI_math_mpq.hh" -#include "BLI_mpq2.hh" +#include "BLI_math_vec_mpq_types.hh" #include "BLI_set.hh" #include "BLI_task.hh" #include "BLI_vector.hh" @@ -38,6 +37,8 @@ namespace blender::meshintersect { +using namespace blender::math; + /* Throughout this file, template argument T will be an * arithmetic-like type, like float, double, or mpq_class. */ @@ -788,11 +789,11 @@ bool in_line<mpq_class>(const FatCo<mpq_class> &a, } vec2<mpq_class> exact_ab = b.exact - a.exact; vec2<mpq_class> exact_ac = c.exact - a.exact; - if (vec2<mpq_class>::dot(exact_ab, exact_ac) < 0) { + if (dot(exact_ab, exact_ac) < 0) { return false; } vec2<mpq_class> exact_bc = c.exact - b.exact; - return vec2<mpq_class>::dot(exact_bc, exact_ac) >= 0; + return dot(exact_bc, exact_ac) >= 0; } #endif @@ -801,11 +802,11 @@ bool in_line<double>(const FatCo<double> &a, const FatCo<double> &b, const FatCo { vec2<double> ab = b.approx - a.approx; vec2<double> ac = c.approx - a.approx; - if (vec2<double>::dot(ab, ac) < 0) { + if (dot(ab, ac) < 0) { return false; } vec2<double> bc = c.approx - b.approx; - return vec2<double>::dot(bc, ac) >= 0; + return dot(bc, ac) >= 0; } template<> CDTVert<double>::CDTVert(const vec2<double> &pt) @@ -1081,7 +1082,7 @@ template<typename T> CDTEdge<T> *CDTArrangement<T>::split_edge(SymEdge<T> *se, T SymEdge<T> *sesymprev = prev(sesym); SymEdge<T> *sesymprevsym = sym(sesymprev); SymEdge<T> *senext = se->next; - CDTVert<T> *v = this->add_vert(vec2<T>::interpolate(*a, *b, lambda)); + CDTVert<T> *v = this->add_vert(interpolate(*a, *b, lambda)); CDTEdge<T> *e = this->add_edge(v, se->next->vert, se->face, sesym->face); sesym->vert = v; SymEdge<T> *newse = &e->symedges[0]; @@ -1704,16 +1705,16 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco, BLI_assert(se_vcva->vert == vc && se_vcva->next->vert == va); BLI_assert(se_vcvb->vert == vc && se_vcvb->next->vert == vb); UNUSED_VARS_NDEBUG(vc); - auto isect = vec2<T>::isect_seg_seg(va->co.exact, vb->co.exact, curco.exact, v2->co.exact); + auto isect = isect_seg_seg<vec2<T>>(va->co.exact, vb->co.exact, curco.exact, v2->co.exact); T &lambda = isect.lambda; switch (isect.kind) { - case vec2<T>::isect_result::LINE_LINE_CROSS: { + case isect_result<vec2<T>>::LINE_LINE_CROSS: { #ifdef WITH_GMP if (!std::is_same<T, mpq_class>::value) { #else if (true) { #endif - double len_ab = vec2<double>::distance(va->co.approx, vb->co.approx); + double len_ab = distance(va->co.approx, vb->co.approx); if (lambda * len_ab <= epsilon) { fill_crossdata_for_through_vert(va, se_vcva, cd, cd_next); } @@ -1735,7 +1736,7 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco, } break; } - case vec2<T>::isect_result::LINE_LINE_EXACT: { + case isect_result<vec2<T>>::LINE_LINE_EXACT: { if (lambda == 0) { fill_crossdata_for_through_vert(va, se_vcva, cd, cd_next); } @@ -1750,7 +1751,7 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco, } break; } - case vec2<T>::isect_result::LINE_LINE_NONE: { + case isect_result<vec2<T>>::LINE_LINE_NONE: { #ifdef WITH_GMP if (std::is_same<T, mpq_class>::value) { BLI_assert(false); @@ -1766,9 +1767,9 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco, } break; } - case vec2<T>::isect_result::LINE_LINE_COLINEAR: { - if (vec2<double>::distance_squared(va->co.approx, v2->co.approx) <= - vec2<double>::distance_squared(vb->co.approx, v2->co.approx)) { + case isect_result<vec2<T>>::LINE_LINE_COLINEAR: { + if (distance_squared(va->co.approx, v2->co.approx) <= + distance_squared(vb->co.approx, v2->co.approx)) { fill_crossdata_for_through_vert(va, se_vcva, cd, cd_next); } else { @@ -1845,7 +1846,7 @@ void get_next_crossing_from_edge(CrossData<T> *cd, { CDTVert<T> *va = cd->in->vert; CDTVert<T> *vb = cd->in->next->vert; - vec2<T> curco = vec2<T>::interpolate(va->co.exact, vb->co.exact, cd->lambda); + vec2<T> curco = interpolate(va->co.exact, vb->co.exact, cd->lambda); FatCo<T> fat_curco(curco); SymEdge<T> *se_ac = sym(cd->in)->next; CDTVert<T> *vc = se_ac->next->vert; @@ -2386,7 +2387,7 @@ template<typename T> void remove_non_constraint_edges_leave_valid_bmesh(CDT_stat dissolvable_edges[i].e = e; const vec2<double> &co1 = e->symedges[0].vert->co.approx; const vec2<double> &co2 = e->symedges[1].vert->co.approx; - dissolvable_edges[i].len_squared = vec2<double>::distance_squared(co1, co2); + dissolvable_edges[i].len_squared = distance_squared(co1, co2); i++; } } @@ -2569,18 +2570,18 @@ template<typename T> void detect_holes(CDT_state<T> *cdt_state) if (e->symedges[0].face->visit_index == e->symedges[1].face->visit_index) { continue; /* Don't count hits on edges between faces in same region. */ } - auto isect = vec2<T>::isect_seg_seg(ray_end.exact, + auto isect = isect_seg_seg<vec2<T>>(ray_end.exact, mid.exact, e->symedges[0].vert->co.exact, e->symedges[1].vert->co.exact); switch (isect.kind) { - case vec2<T>::isect_result::LINE_LINE_CROSS: { + case isect_result<vec2<T>>::LINE_LINE_CROSS: { hits++; break; } - case vec2<T>::isect_result::LINE_LINE_EXACT: - case vec2<T>::isect_result::LINE_LINE_NONE: - case vec2<T>::isect_result::LINE_LINE_COLINEAR: + case isect_result<vec2<T>>::LINE_LINE_EXACT: + case isect_result<vec2<T>>::LINE_LINE_NONE: + case isect_result<vec2<T>>::LINE_LINE_COLINEAR: break; } } diff --git a/source/blender/blenlib/intern/math_boolean.cc b/source/blender/blenlib/intern/math_boolean.cc index c16755868aa..0bae3c23f79 100644 --- a/source/blender/blenlib/intern/math_boolean.cc +++ b/source/blender/blenlib/intern/math_boolean.cc @@ -18,15 +18,10 @@ * \ingroup bli */ -#include "BLI_double2.hh" -#include "BLI_double3.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_hash.hh" #include "BLI_math_boolean.hh" #include "BLI_math_mpq.hh" -#include "BLI_mpq2.hh" -#include "BLI_mpq3.hh" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "BLI_utildefines.h" diff --git a/source/blender/blenlib/intern/math_vec.cc b/source/blender/blenlib/intern/math_vec.cc index 223c0e273f0..6fab6c9a383 100644 --- a/source/blender/blenlib/intern/math_vec.cc +++ b/source/blender/blenlib/intern/math_vec.cc @@ -18,89 +18,83 @@ * \ingroup bli */ -#include "BLI_double2.hh" -#include "BLI_double3.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_hash.hh" -#include "BLI_math_mpq.hh" -#include "BLI_mpq2.hh" -#include "BLI_mpq3.hh" +#include "BLI_math_vec_mpq_types.hh" +#include "BLI_math_vector.hh" #include "BLI_span.hh" #include "BLI_utildefines.h" -namespace blender { +namespace blender::math { -float2::isect_result float2::isect_seg_seg(const float2 &v1, - const float2 &v2, - const float2 &v3, - const float2 &v4) +template<> +isect_result<float2> isect_seg_seg(const float2 &v1, + const float2 &v2, + const float2 &v3, + const float2 &v4) { - float2::isect_result ans; + isect_result<float2> ans; float div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]); if (div == 0.0f) { ans.lambda = 0.0f; - ans.mu = 0.0f; - ans.kind = float2::isect_result::LINE_LINE_COLINEAR; + ans.kind = isect_result<float2>::LINE_LINE_COLINEAR; } else { ans.lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div; - ans.mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div; - if (ans.lambda >= 0.0f && ans.lambda <= 1.0f && ans.mu >= 0.0f && ans.mu <= 1.0f) { - if (ans.lambda == 0.0f || ans.lambda == 1.0f || ans.mu == 0.0f || ans.mu == 1.0f) { - ans.kind = float2::isect_result::LINE_LINE_EXACT; + float mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div; + if (ans.lambda >= 0.0f && ans.lambda <= 1.0f && mu >= 0.0f && mu <= 1.0f) { + if (ans.lambda == 0.0f || ans.lambda == 1.0f || mu == 0.0f || mu == 1.0f) { + ans.kind = isect_result<float2>::LINE_LINE_EXACT; } else { - ans.kind = float2::isect_result::LINE_LINE_CROSS; + ans.kind = isect_result<float2>::LINE_LINE_CROSS; } } else { - ans.kind = float2::isect_result::LINE_LINE_NONE; + ans.kind = isect_result<float2>::LINE_LINE_NONE; } } return ans; } -double2::isect_result double2::isect_seg_seg(const double2 &v1, - const double2 &v2, - const double2 &v3, - const double2 &v4) +template<> +isect_result<double2> isect_seg_seg(const double2 &v1, + const double2 &v2, + const double2 &v3, + const double2 &v4) { - double2::isect_result ans; + isect_result<double2> ans; double div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]); if (div == 0.0) { ans.lambda = 0.0; - ans.kind = double2::isect_result::LINE_LINE_COLINEAR; + ans.kind = isect_result<double2>::LINE_LINE_COLINEAR; } else { ans.lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div; double mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div; if (ans.lambda >= 0.0 && ans.lambda <= 1.0 && mu >= 0.0 && mu <= 1.0) { if (ans.lambda == 0.0 || ans.lambda == 1.0 || mu == 0.0 || mu == 1.0) { - ans.kind = double2::isect_result::LINE_LINE_EXACT; + ans.kind = isect_result<double2>::LINE_LINE_EXACT; } else { - ans.kind = double2::isect_result::LINE_LINE_CROSS; + ans.kind = isect_result<double2>::LINE_LINE_CROSS; } } else { - ans.kind = double2::isect_result::LINE_LINE_NONE; + ans.kind = isect_result<double2>::LINE_LINE_NONE; } } return ans; } #ifdef WITH_GMP -mpq2::isect_result mpq2::isect_seg_seg(const mpq2 &v1, - const mpq2 &v2, - const mpq2 &v3, - const mpq2 &v4) +template<> +isect_result<mpq2> isect_seg_seg(const mpq2 &v1, const mpq2 &v2, const mpq2 &v3, const mpq2 &v4) { - mpq2::isect_result ans; + isect_result<mpq2> ans; mpq_class div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]); if (div == 0.0) { ans.lambda = 0.0; - ans.kind = mpq2::isect_result::LINE_LINE_COLINEAR; + ans.kind = isect_result<mpq2>::LINE_LINE_COLINEAR; } else { ans.lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div; @@ -109,66 +103,21 @@ mpq2::isect_result mpq2::isect_seg_seg(const mpq2 &v1, if (ans.lambda >= 0 && ans.lambda <= 1 && ((div > 0 && mudiv >= 0 && mudiv <= div) || (div < 0 && mudiv <= 0 && mudiv >= div))) { if (ans.lambda == 0 || ans.lambda == 1 || mudiv == 0 || mudiv == div) { - ans.kind = mpq2::isect_result::LINE_LINE_EXACT; + ans.kind = isect_result<mpq2>::LINE_LINE_EXACT; } else { - ans.kind = mpq2::isect_result::LINE_LINE_CROSS; + ans.kind = isect_result<mpq2>::LINE_LINE_CROSS; } } else { - ans.kind = mpq2::isect_result::LINE_LINE_NONE; + ans.kind = isect_result<mpq2>::LINE_LINE_NONE; } } return ans; } #endif -double3 double3::cross_poly(Span<double3> poly) -{ - /* Newell's Method. */ - int nv = static_cast<int>(poly.size()); - if (nv < 3) { - return double3(0, 0, 0); - } - const double3 *v_prev = &poly[nv - 1]; - const double3 *v_curr = &poly[0]; - double3 n(0, 0, 0); - for (int i = 0; i < nv;) { - n[0] = n[0] + ((*v_prev)[1] - (*v_curr)[1]) * ((*v_prev)[2] + (*v_curr)[2]); - n[1] = n[1] + ((*v_prev)[2] - (*v_curr)[2]) * ((*v_prev)[0] + (*v_curr)[0]); - n[2] = n[2] + ((*v_prev)[0] - (*v_curr)[0]) * ((*v_prev)[1] + (*v_curr)[1]); - v_prev = v_curr; - ++i; - if (i < nv) { - v_curr = &poly[i]; - } - } - return n; -} - #ifdef WITH_GMP -mpq3 mpq3::cross_poly(Span<mpq3> poly) -{ - /* Newell's Method. */ - int nv = static_cast<int>(poly.size()); - if (nv < 3) { - return mpq3(0); - } - const mpq3 *v_prev = &poly[nv - 1]; - const mpq3 *v_curr = &poly[0]; - mpq3 n(0); - for (int i = 0; i < nv;) { - n[0] = n[0] + ((*v_prev)[1] - (*v_curr)[1]) * ((*v_prev)[2] + (*v_curr)[2]); - n[1] = n[1] + ((*v_prev)[2] - (*v_curr)[2]) * ((*v_prev)[0] + (*v_curr)[0]); - n[2] = n[2] + ((*v_prev)[0] - (*v_curr)[0]) * ((*v_prev)[1] + (*v_curr)[1]); - v_prev = v_curr; - ++i; - if (i < nv) { - v_curr = &poly[i]; - } - } - return n; -} uint64_t hash_mpq_class(const mpq_class &value) { @@ -176,20 +125,6 @@ uint64_t hash_mpq_class(const mpq_class &value) return get_default_hash(static_cast<float>(value.get_d())); } -uint64_t mpq2::hash() const -{ - uint64_t hashx = hash_mpq_class(this->x); - uint64_t hashy = hash_mpq_class(this->y); - return hashx ^ (hashy * 33); -} - -uint64_t mpq3::hash() const -{ - uint64_t hashx = hash_mpq_class(this->x); - uint64_t hashy = hash_mpq_class(this->y); - uint64_t hashz = hash_mpq_class(this->z); - return hashx ^ (hashy * 33) ^ (hashz * 33 * 37); -} #endif -} // namespace blender +} // namespace blender::math diff --git a/source/blender/blenlib/intern/mesh_boolean.cc b/source/blender/blenlib/intern/mesh_boolean.cc index ce4db0c6b9d..a3eae1896d3 100644 --- a/source/blender/blenlib/intern/mesh_boolean.cc +++ b/source/blender/blenlib/intern/mesh_boolean.cc @@ -28,8 +28,6 @@ # include "BLI_array.hh" # include "BLI_assert.h" # include "BLI_delaunay_2d.h" -# include "BLI_double3.hh" -# include "BLI_float3.hh" # include "BLI_hash.hh" # include "BLI_kdopbvh.h" # include "BLI_map.hh" @@ -37,8 +35,9 @@ # include "BLI_math_boolean.hh" # include "BLI_math_geom.h" # include "BLI_math_mpq.hh" +# include "BLI_math_vec_mpq_types.hh" +# include "BLI_math_vec_types.hh" # include "BLI_mesh_intersect.hh" -# include "BLI_mpq3.hh" # include "BLI_set.hh" # include "BLI_span.hh" # include "BLI_stack.hh" @@ -1633,13 +1632,13 @@ static Edge find_good_sorting_edge(const Vert *testp, ordinate[axis_next] = -abscissa[axis]; ordinate[axis_next_next] = 0; /* By construction, dot(abscissa, ordinate) == 0, so they are perpendicular. */ - mpq3 normal = mpq3::cross(abscissa, ordinate); + mpq3 normal = math::cross(abscissa, ordinate); if (dbg_level > 0) { std::cout << "abscissa = " << abscissa << "\n"; std::cout << "ordinate = " << ordinate << "\n"; std::cout << "normal = " << normal << "\n"; } - mpq_class nlen2 = normal.length_squared(); + mpq_class nlen2 = math::length_squared(normal); mpq_class max_abs_slope = -1; Edge esort; const Vector<Edge> &edges = tmtopo.vert_edges(closestp); @@ -1648,12 +1647,12 @@ static Edge find_good_sorting_edge(const Vert *testp, const mpq3 &co_other = v_other->co_exact; mpq3 evec = co_other - co_closest; /* Get projection of evec onto plane of abscissa and ordinate. */ - mpq3 proj_evec = evec - (mpq3::dot(evec, normal) / nlen2) * normal; + mpq3 proj_evec = evec - (math::dot(evec, normal) / nlen2) * normal; /* The projection calculations along the abscissa and ordinate should * be scaled by 1/abscissa and 1/ordinate respectively, * but we can skip: it won't affect which `evec` has the maximum slope. */ - mpq_class evec_a = mpq3::dot(proj_evec, abscissa); - mpq_class evec_o = mpq3::dot(proj_evec, ordinate); + mpq_class evec_a = math::dot(proj_evec, abscissa); + mpq_class evec_o = math::dot(proj_evec, ordinate); if (dbg_level > 0) { std::cout << "e = " << e << "\n"; std::cout << "v_other = " << v_other << "\n"; @@ -1791,8 +1790,8 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, ap = p; ap -= a; - mpq_class d1 = mpq3::dot_with_buffer(ab, ap, m); - mpq_class d2 = mpq3::dot_with_buffer(ac, ap, m); + mpq_class d1 = math::dot_with_buffer(ab, ap, m); + mpq_class d2 = math::dot_with_buffer(ac, ap, m); if (d1 <= 0 && d2 <= 0) { /* Barycentric coordinates (1,0,0). */ *r_edge = -1; @@ -1800,13 +1799,13 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = a\n"; } - return mpq3::distance_squared_with_buffer(p, a, m); + return math::distance_squared_with_buffer(p, a, m); } /* Check if p in vertex region outside b. */ bp = p; bp -= b; - mpq_class d3 = mpq3::dot_with_buffer(ab, bp, m); - mpq_class d4 = mpq3::dot_with_buffer(ac, bp, m); + mpq_class d3 = math::dot_with_buffer(ab, bp, m); + mpq_class d4 = math::dot_with_buffer(ac, bp, m); if (d3 >= 0 && d4 <= d3) { /* Barycentric coordinates (0,1,0). */ *r_edge = -1; @@ -1814,7 +1813,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = b\n"; } - return mpq3::distance_squared_with_buffer(p, b, m); + return math::distance_squared_with_buffer(p, b, m); } /* Check if p in region of ab. */ mpq_class vc = d1 * d4 - d3 * d2; @@ -1829,13 +1828,13 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = on ab at " << r << "\n"; } - return mpq3::distance_squared_with_buffer(p, r, m); + return math::distance_squared_with_buffer(p, r, m); } /* Check if p in vertex region outside c. */ cp = p; cp -= c; - mpq_class d5 = mpq3::dot_with_buffer(ab, cp, m); - mpq_class d6 = mpq3::dot_with_buffer(ac, cp, m); + mpq_class d5 = math::dot_with_buffer(ab, cp, m); + mpq_class d6 = math::dot_with_buffer(ac, cp, m); if (d6 >= 0 && d5 <= d6) { /* Barycentric coordinates (0,0,1). */ *r_edge = -1; @@ -1843,7 +1842,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = c\n"; } - return mpq3::distance_squared_with_buffer(p, c, m); + return math::distance_squared_with_buffer(p, c, m); } /* Check if p in edge region of ac. */ mpq_class vb = d5 * d2 - d1 * d6; @@ -1858,7 +1857,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = on ac at " << r << "\n"; } - return mpq3::distance_squared_with_buffer(p, r, m); + return math::distance_squared_with_buffer(p, r, m); } /* Check if p in edge region of bc. */ mpq_class va = d3 * d6 - d5 * d4; @@ -1874,7 +1873,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = on bc at " << r << "\n"; } - return mpq3::distance_squared_with_buffer(p, r, m); + return math::distance_squared_with_buffer(p, r, m); } /* p inside face region. Compute barycentric coordinates (u,v,w). */ mpq_class denom = 1 / (va + vb + vc); @@ -1890,7 +1889,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p, if (dbg_level > 0) { std::cout << " answer = inside at " << r << "\n"; } - return mpq3::distance_squared_with_buffer(p, r, m); + return math::distance_squared_with_buffer(p, r, m); } static float closest_on_tri_to_point_float_dist_squared(const float3 &p, @@ -2610,7 +2609,7 @@ static void test_tri_inside_shapes(const IMesh &tm, double3 test_point = calc_point_inside_tri_db(tri_test); /* Offset the test point a tiny bit in the tri_test normal direction. */ tri_test.populate_plane(false); - double3 norm = tri_test.plane->norm.normalized(); + double3 norm = math::normalize(tri_test.plane->norm); const double offset_amount = 1e-5; double3 offset_test_point = test_point + offset_amount * norm; if (dbg_level > 0) { @@ -3002,7 +3001,7 @@ static void init_face_merge_state(FaceMergeState *fms, std::cout << "process tri = " << &tri << "\n"; } BLI_assert(tri.plane_populated()); - if (double3::dot(norm, tri.plane->norm) <= 0.0) { + if (math::dot(norm, tri.plane->norm) <= 0.0) { if (dbg_level > 0) { std::cout << "triangle has wrong orientation, skipping\n"; } @@ -3027,7 +3026,7 @@ static void init_face_merge_state(FaceMergeState *fms, } if (me_index == -1) { double3 vec = new_me.v2->co - new_me.v1->co; - new_me.len_squared = vec.length_squared(); + new_me.len_squared = math::length_squared(vec); new_me.orig = tri.edge_orig[i]; new_me.is_intersect = tri.is_intersect[i]; new_me.dissolvable = (new_me.orig == NO_INDEX && !new_me.is_intersect); @@ -3267,7 +3266,7 @@ static Vector<Face *> merge_tris_for_face(Vector<int> tris, bool done = false; double3 first_tri_normal = tm.face(tris[0])->plane->norm; double3 second_tri_normal = tm.face(tris[1])->plane->norm; - if (tris.size() == 2 && double3::dot(first_tri_normal, second_tri_normal) > 0.0) { + if (tris.size() == 2 && math::dot(first_tri_normal, second_tri_normal) > 0.0) { /* Is this a case where quad with one diagonal remained unchanged? * Worth special handling because this case will be very common. */ Face &tri1 = *tm.face(tris[0]); @@ -3332,7 +3331,7 @@ static bool approx_in_line(const double3 &a, const double3 &b, const double3 &c) { double3 vec1 = b - a; double3 vec2 = c - b; - double cos_ang = double3::dot(vec1.normalized(), vec2.normalized()); + double cos_ang = math::dot(math::normalize(vec1), math::normalize(vec2)); return fabs(cos_ang - 1.0) < 1e-4; } diff --git a/source/blender/blenlib/intern/mesh_intersect.cc b/source/blender/blenlib/intern/mesh_intersect.cc index 1f150137ba3..982759ffcff 100644 --- a/source/blender/blenlib/intern/mesh_intersect.cc +++ b/source/blender/blenlib/intern/mesh_intersect.cc @@ -30,15 +30,13 @@ # include "BLI_array.hh" # include "BLI_assert.h" # include "BLI_delaunay_2d.h" -# include "BLI_double3.hh" -# include "BLI_float3.hh" # include "BLI_hash.hh" # include "BLI_kdopbvh.h" # include "BLI_map.hh" # include "BLI_math_boolean.hh" # include "BLI_math_mpq.hh" -# include "BLI_mpq2.hh" -# include "BLI_mpq3.hh" +# include "BLI_math_vec_mpq_types.hh" +# include "BLI_math_vec_types.hh" # include "BLI_polyfill_2d.h" # include "BLI_set.hh" # include "BLI_span.hh" @@ -198,14 +196,14 @@ void Face::populate_plane(bool need_exact) for (int i : index_range()) { co[i] = vert[i]->co_exact; } - normal_exact = mpq3::cross_poly(co); + normal_exact = math::cross_poly(co.as_span()); } else { mpq3 tr02 = vert[0]->co_exact - vert[2]->co_exact; mpq3 tr12 = vert[1]->co_exact - vert[2]->co_exact; - normal_exact = mpq3::cross(tr02, tr12); + normal_exact = math::cross(tr02, tr12); } - mpq_class d_exact = -mpq3::dot(normal_exact, vert[0]->co_exact); + mpq_class d_exact = -math::dot(normal_exact, vert[0]->co_exact); plane = new Plane(normal_exact, d_exact); } else { @@ -215,14 +213,14 @@ void Face::populate_plane(bool need_exact) for (int i : index_range()) { co[i] = vert[i]->co; } - normal = double3::cross_poly(co); + normal = math::cross_poly(co.as_span()); } else { double3 tr02 = vert[0]->co - vert[2]->co; double3 tr12 = vert[1]->co - vert[2]->co; - normal = double3::cross_high_precision(tr02, tr12); + normal = math::cross(tr02, tr12); } - double d = -double3::dot(normal, vert[0]->co); + double d = -math::dot(normal, vert[0]->co); plane = new Plane(normal, d); } } @@ -1098,15 +1096,15 @@ static mpq2 project_3d_to_2d(const mpq3 &p3d, int proj_axis) */ static double supremum_dot_cross(const double3 &a, const double3 &b) { - double3 abs_a = double3::abs(a); - double3 abs_b = double3::abs(b); + double3 abs_a = math::abs(a); + double3 abs_b = math::abs(b); double3 c; /* This is dot(cross(a, b), cross(a,b)) but using absolute values for a and b * and always using + when operation is + or -. */ c[0] = abs_a[1] * abs_b[2] + abs_a[2] * abs_b[1]; c[1] = abs_a[2] * abs_b[0] + abs_a[0] * abs_b[2]; c[2] = abs_a[0] * abs_b[1] + abs_a[1] * abs_b[0]; - return double3::dot(c, c); + return math::dot(c, c); } /* The index of dot when inputs are plane_coords with index 1 is much higher. @@ -1143,11 +1141,11 @@ static int filter_plane_side(const double3 &p, const double3 &abs_plane_p, const double3 &abs_plane_no) { - double d = double3::dot(p - plane_p, plane_no); + double d = math::dot(p - plane_p, plane_no); if (d == 0.0) { return 0; } - double supremum = double3::dot(abs_p + abs_plane_p, abs_plane_no); + double supremum = math::dot(abs_p + abs_plane_p, abs_plane_no); double err_bound = supremum * index_plane_side * DBL_EPSILON; if (fabs(d) > err_bound) { return d > 0 ? 1 : -1; @@ -1178,9 +1176,9 @@ static inline mpq3 tti_interp( ab -= b; ac = a; ac -= c; - mpq_class den = mpq3::dot_with_buffer(ab, n, dotbuf); + mpq_class den = math::dot_with_buffer(ab, n, dotbuf); BLI_assert(den != 0); - mpq_class alpha = mpq3::dot_with_buffer(ac, n, dotbuf) / den; + mpq_class alpha = math::dot_with_buffer(ac, n, dotbuf) / den; return a - alpha * ab; } @@ -1209,7 +1207,7 @@ static inline int tti_above(const mpq3 &a, n.y = ba.z * ca.x - ba.x * ca.z; n.z = ba.x * ca.y - ba.y * ca.x; - return sgn(mpq3::dot_with_buffer(ad, n, dotbuf)); + return sgn(math::dot_with_buffer(ad, n, dotbuf)); } /** @@ -1428,11 +1426,11 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2) const double3 &d_r2 = vr2->co; const double3 &d_n2 = tri2.plane->norm; - const double3 &abs_d_p1 = double3::abs(d_p1); - const double3 &abs_d_q1 = double3::abs(d_q1); - const double3 &abs_d_r1 = double3::abs(d_r1); - const double3 &abs_d_r2 = double3::abs(d_r2); - const double3 &abs_d_n2 = double3::abs(d_n2); + const double3 &abs_d_p1 = math::abs(d_p1); + const double3 &abs_d_q1 = math::abs(d_q1); + const double3 &abs_d_r1 = math::abs(d_r1); + const double3 &abs_d_r2 = math::abs(d_r2); + const double3 &abs_d_n2 = math::abs(d_n2); int sp1 = filter_plane_side(d_p1, d_r2, d_n2, abs_d_p1, abs_d_r2, abs_d_n2); int sq1 = filter_plane_side(d_q1, d_r2, d_n2, abs_d_q1, abs_d_r2, abs_d_n2); @@ -1448,9 +1446,9 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2) } const double3 &d_n1 = tri1.plane->norm; - const double3 &abs_d_p2 = double3::abs(d_p2); - const double3 &abs_d_q2 = double3::abs(d_q2); - const double3 &abs_d_n1 = double3::abs(d_n1); + const double3 &abs_d_p2 = math::abs(d_p2); + const double3 &abs_d_q2 = math::abs(d_q2); + const double3 &abs_d_n1 = math::abs(d_n1); int sp2 = filter_plane_side(d_p2, d_r1, d_n1, abs_d_p2, abs_d_r1, abs_d_n1); int sq2 = filter_plane_side(d_q2, d_r1, d_n1, abs_d_q2, abs_d_r1, abs_d_n1); @@ -1477,17 +1475,17 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2) if (sp1 == 0) { buf[0] = p1; buf[0] -= r2; - sp1 = sgn(mpq3::dot_with_buffer(buf[0], n2, buf[1])); + sp1 = sgn(math::dot_with_buffer(buf[0], n2, buf[1])); } if (sq1 == 0) { buf[0] = q1; buf[0] -= r2; - sq1 = sgn(mpq3::dot_with_buffer(buf[0], n2, buf[1])); + sq1 = sgn(math::dot_with_buffer(buf[0], n2, buf[1])); } if (sr1 == 0) { buf[0] = r1; buf[0] -= r2; - sr1 = sgn(mpq3::dot_with_buffer(buf[0], n2, buf[1])); + sr1 = sgn(math::dot_with_buffer(buf[0], n2, buf[1])); } if (dbg_level > 1) { @@ -1509,17 +1507,17 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2) if (sp2 == 0) { buf[0] = p2; buf[0] -= r1; - sp2 = sgn(mpq3::dot_with_buffer(buf[0], n1, buf[1])); + sp2 = sgn(math::dot_with_buffer(buf[0], n1, buf[1])); } if (sq2 == 0) { buf[0] = q2; buf[0] -= r1; - sq2 = sgn(mpq3::dot_with_buffer(buf[0], n1, buf[1])); + sq2 = sgn(math::dot_with_buffer(buf[0], n1, buf[1])); } if (sr2 == 0) { buf[0] = r2; buf[0] -= r1; - sr2 = sgn(mpq3::dot_with_buffer(buf[0], n1, buf[1])); + sr2 = sgn(math::dot_with_buffer(buf[0], n1, buf[1])); } if (dbg_level > 1) { @@ -1721,7 +1719,7 @@ static CDT_data prepare_cdt_input(const IMesh &tm, int t, const Vector<ITT_value BLI_assert(tm.face(t)->plane_populated()); ans.t_plane = tm.face(t)->plane; BLI_assert(ans.t_plane->exact_populated()); - ans.proj_axis = mpq3::dominant_axis(ans.t_plane->norm_exact); + ans.proj_axis = math::dominant_axis(ans.t_plane->norm_exact); prepare_need_tri(ans, tm, t); for (const ITT_value &itt : itts) { switch (itt.kind) { @@ -1757,7 +1755,7 @@ static CDT_data prepare_cdt_input_for_cluster(const IMesh &tm, BLI_assert(tm.face(t0)->plane_populated()); ans.t_plane = tm.face(t0)->plane; BLI_assert(ans.t_plane->exact_populated()); - ans.proj_axis = mpq3::dominant_axis(ans.t_plane->norm_exact); + ans.proj_axis = math::dominant_axis(ans.t_plane->norm_exact); for (const int t : cl) { prepare_need_tri(ans, tm, t); } @@ -2004,9 +2002,9 @@ static bool is_quad_flip_first_third(const double3 &v1, const double3 &normal) { double3 dir_v3v1 = v3 - v1; - double3 tangent = double3::cross_high_precision(dir_v3v1, normal); - double dot = double3::dot(v1, tangent); - return (double3::dot(v4, tangent) >= dot) || (double3::dot(v2, tangent) <= dot); + double3 tangent = math::cross(dir_v3v1, normal); + double dot = math::dot(v1, tangent); + return (math::dot(v4, tangent) >= dot) || (math::dot(v2, tangent) <= dot); } /** @@ -2124,7 +2122,7 @@ static Array<Face *> exact_triangulate_poly(Face *f, IMeshArena *arena) f->populate_plane(false); } const double3 &poly_normal = f->plane->norm; - int axis = double3::dominant_axis(poly_normal); + int axis = math::dominant_axis(poly_normal); /* If project down y axis as opposed to x or z, the orientation * of the polygon will be reversed. * Yet another reversal happens if the poly normal in the dominant @@ -2203,15 +2201,15 @@ static bool face_is_degenerate(const Face *f) } double3 da = v2->co - v0->co; double3 db = v2->co - v1->co; - double3 dab = double3::cross_high_precision(da, db); - double dab_length_squared = dab.length_squared(); + double3 dab = math::cross(da, db); + double dab_length_squared = math::length_squared(dab); double err_bound = supremum_dot_cross(dab, dab) * index_dot_cross * DBL_EPSILON; if (dab_length_squared > err_bound) { return false; } mpq3 a = v2->co_exact - v0->co_exact; mpq3 b = v2->co_exact - v1->co_exact; - mpq3 ab = mpq3::cross(a, b); + mpq3 ab = math::cross(a, b); if (ab.x == 0 && ab.y == 0 && ab.z == 0) { return true; } @@ -2231,8 +2229,8 @@ static bool any_degenerate_tris_fast(const Array<Face *> triangulation) } double3 da = v2->co - v0->co; double3 db = v2->co - v1->co; - double da_length_squared = da.length_squared(); - double db_length_squared = db.length_squared(); + double da_length_squared = math::length_squared(da); + double db_length_squared = math::length_squared(db); if (da_length_squared == 0.0 || db_length_squared == 0.0) { return true; } @@ -2240,8 +2238,8 @@ static bool any_degenerate_tris_fast(const Array<Face *> triangulation) * The triangle is almost degenerate if sin t is almost 0. * sin^2 t = |da x db|^2 / (|da|^2 |db|^2) */ - double3 dab = double3::cross_high_precision(da, db); - double dab_length_squared = dab.length_squared(); + double3 dab = math::cross(da, db); + double dab_length_squared = math::length_squared(dab); double sin_squared_t = dab_length_squared / (da_length_squared * db_length_squared); if (sin_squared_t < 1e-8) { return true; diff --git a/source/blender/blenlib/intern/noise.cc b/source/blender/blenlib/intern/noise.cc index a6ad18801fd..3460c1284fc 100644 --- a/source/blender/blenlib/intern/noise.cc +++ b/source/blender/blenlib/intern/noise.cc @@ -50,9 +50,7 @@ #include <cmath> #include <cstdint> -#include "BLI_float2.hh" -#include "BLI_float3.hh" -#include "BLI_float4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_math_base_safe.h" #include "BLI_noise.hh" #include "BLI_utildefines.h" @@ -1469,7 +1467,7 @@ void voronoi_smooth_f1(const float w, correctionFactor /= 1.0f + 3.0f * smoothness; if (r_color != nullptr) { const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset); - smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor; + smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor; } if (r_w != nullptr) { smoothPosition = mix(smoothPosition, pointPosition, h) - correctionFactor; @@ -1592,7 +1590,7 @@ static float voronoi_distance(const float2 a, { switch (metric) { case NOISE_SHD_VORONOI_EUCLIDEAN: - return float2::distance(a, b); + return math::distance(a, b); case NOISE_SHD_VORONOI_MANHATTAN: return fabsf(a.x - b.x) + fabsf(a.y - b.y); case NOISE_SHD_VORONOI_CHEBYCHEV: @@ -1615,7 +1613,7 @@ void voronoi_f1(const float2 coord, float3 *r_color, float2 *r_position) { - const float2 cellPosition = float2::floor(coord); + const float2 cellPosition = math::floor(coord); const float2 localPosition = coord - cellPosition; float minDistance = 8.0f; @@ -1654,7 +1652,7 @@ void voronoi_smooth_f1(const float2 coord, float3 *r_color, float2 *r_position) { - const float2 cellPosition = float2::floor(coord); + const float2 cellPosition = math::floor(coord); const float2 localPosition = coord - cellPosition; const float smoothness_clamped = max_ff(smoothness, FLT_MIN); @@ -1676,11 +1674,10 @@ void voronoi_smooth_f1(const float2 coord, correctionFactor /= 1.0f + 3.0f * smoothness; if (r_color != nullptr) { const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset); - smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor; + smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor; } if (r_position != nullptr) { - smoothPosition = float2::interpolate(smoothPosition, pointPosition, h) - - correctionFactor; + smoothPosition = math::interpolate(smoothPosition, pointPosition, h) - correctionFactor; } } } @@ -1704,7 +1701,7 @@ void voronoi_f2(const float2 coord, float3 *r_color, float2 *r_position) { - const float2 cellPosition = float2::floor(coord); + const float2 cellPosition = math::floor(coord); const float2 localPosition = coord - cellPosition; float distanceF1 = 8.0f; @@ -1748,7 +1745,7 @@ void voronoi_f2(const float2 coord, void voronoi_distance_to_edge(const float2 coord, const float randomness, float *r_distance) { - const float2 cellPosition = float2::floor(coord); + const float2 cellPosition = math::floor(coord); const float2 localPosition = coord - cellPosition; float2 vectorToClosest = float2(0.0f, 0.0f); @@ -1777,7 +1774,7 @@ void voronoi_distance_to_edge(const float2 coord, const float randomness, float const float2 perpendicularToEdge = vectorToPoint - vectorToClosest; if (dot_v2v2(perpendicularToEdge, perpendicularToEdge) > 0.0001f) { const float distanceToEdge = dot_v2v2((vectorToClosest + vectorToPoint) / 2.0f, - perpendicularToEdge.normalized()); + math::normalize(perpendicularToEdge)); minDistance = std::min(minDistance, distanceToEdge); } } @@ -1787,7 +1784,7 @@ void voronoi_distance_to_edge(const float2 coord, const float randomness, float void voronoi_n_sphere_radius(const float2 coord, const float randomness, float *r_radius) { - const float2 cellPosition = float2::floor(coord); + const float2 cellPosition = math::floor(coord); const float2 localPosition = coord - cellPosition; float2 closestPoint = float2(0.0f, 0.0f); @@ -1798,7 +1795,7 @@ void voronoi_n_sphere_radius(const float2 coord, const float randomness, float * const float2 cellOffset = float2(i, j); const float2 pointPosition = cellOffset + hash_float_to_float2(cellPosition + cellOffset) * randomness; - const float distanceToPoint = float2::distance(pointPosition, localPosition); + const float distanceToPoint = math::distance(pointPosition, localPosition); if (distanceToPoint < minDistance) { minDistance = distanceToPoint; closestPoint = pointPosition; @@ -1817,14 +1814,14 @@ void voronoi_n_sphere_radius(const float2 coord, const float randomness, float * const float2 cellOffset = float2(i, j) + closestPointOffset; const float2 pointPosition = cellOffset + hash_float_to_float2(cellPosition + cellOffset) * randomness; - const float distanceToPoint = float2::distance(closestPoint, pointPosition); + const float distanceToPoint = math::distance(closestPoint, pointPosition); if (distanceToPoint < minDistance) { minDistance = distanceToPoint; closestPointToClosestPoint = pointPosition; } } } - *r_radius = float2::distance(closestPointToClosestPoint, closestPoint) / 2.0f; + *r_radius = math::distance(closestPointToClosestPoint, closestPoint) / 2.0f; } /* **** 3D Voronoi **** */ @@ -1836,7 +1833,7 @@ static float voronoi_distance(const float3 a, { switch (metric) { case NOISE_SHD_VORONOI_EUCLIDEAN: - return float3::distance(a, b); + return math::distance(a, b); case NOISE_SHD_VORONOI_MANHATTAN: return fabsf(a.x - b.x) + fabsf(a.y - b.y) + fabsf(a.z - b.z); case NOISE_SHD_VORONOI_CHEBYCHEV: @@ -1860,7 +1857,7 @@ void voronoi_f1(const float3 coord, float3 *r_color, float3 *r_position) { - const float3 cellPosition = float3::floor(coord); + const float3 cellPosition = math::floor(coord); const float3 localPosition = coord - cellPosition; float minDistance = 8.0f; @@ -1902,7 +1899,7 @@ void voronoi_smooth_f1(const float3 coord, float3 *r_color, float3 *r_position) { - const float3 cellPosition = float3::floor(coord); + const float3 cellPosition = math::floor(coord); const float3 localPosition = coord - cellPosition; const float smoothness_clamped = max_ff(smoothness, FLT_MIN); @@ -1925,10 +1922,10 @@ void voronoi_smooth_f1(const float3 coord, correctionFactor /= 1.0f + 3.0f * smoothness; if (r_color != nullptr) { const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset); - smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor; + smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor; } if (r_position != nullptr) { - smoothPosition = float3::interpolate(smoothPosition, pointPosition, h) - + smoothPosition = math::interpolate(smoothPosition, pointPosition, h) - correctionFactor; } } @@ -1954,7 +1951,7 @@ void voronoi_f2(const float3 coord, float3 *r_color, float3 *r_position) { - const float3 cellPosition = float3::floor(coord); + const float3 cellPosition = math::floor(coord); const float3 localPosition = coord - cellPosition; float distanceF1 = 8.0f; @@ -2000,7 +1997,7 @@ void voronoi_f2(const float3 coord, void voronoi_distance_to_edge(const float3 coord, const float randomness, float *r_distance) { - const float3 cellPosition = float3::floor(coord); + const float3 cellPosition = math::floor(coord); const float3 localPosition = coord - cellPosition; float3 vectorToClosest = float3(0.0f, 0.0f, 0.0f); @@ -2032,7 +2029,7 @@ void voronoi_distance_to_edge(const float3 coord, const float randomness, float const float3 perpendicularToEdge = vectorToPoint - vectorToClosest; if (dot_v3v3(perpendicularToEdge, perpendicularToEdge) > 0.0001f) { const float distanceToEdge = dot_v3v3((vectorToClosest + vectorToPoint) / 2.0f, - perpendicularToEdge.normalized()); + math::normalize(perpendicularToEdge)); minDistance = std::min(minDistance, distanceToEdge); } } @@ -2043,7 +2040,7 @@ void voronoi_distance_to_edge(const float3 coord, const float randomness, float void voronoi_n_sphere_radius(const float3 coord, const float randomness, float *r_radius) { - const float3 cellPosition = float3::floor(coord); + const float3 cellPosition = math::floor(coord); const float3 localPosition = coord - cellPosition; float3 closestPoint = float3(0.0f, 0.0f, 0.0f); @@ -2055,7 +2052,7 @@ void voronoi_n_sphere_radius(const float3 coord, const float randomness, float * const float3 cellOffset = float3(i, j, k); const float3 pointPosition = cellOffset + hash_float_to_float3(cellPosition + cellOffset) * randomness; - const float distanceToPoint = float3::distance(pointPosition, localPosition); + const float distanceToPoint = math::distance(pointPosition, localPosition); if (distanceToPoint < minDistance) { minDistance = distanceToPoint; closestPoint = pointPosition; @@ -2076,7 +2073,7 @@ void voronoi_n_sphere_radius(const float3 coord, const float randomness, float * const float3 cellOffset = float3(i, j, k) + closestPointOffset; const float3 pointPosition = cellOffset + hash_float_to_float3(cellPosition + cellOffset) * randomness; - const float distanceToPoint = float3::distance(closestPoint, pointPosition); + const float distanceToPoint = math::distance(closestPoint, pointPosition); if (distanceToPoint < minDistance) { minDistance = distanceToPoint; closestPointToClosestPoint = pointPosition; @@ -2084,7 +2081,7 @@ void voronoi_n_sphere_radius(const float3 coord, const float randomness, float * } } } - *r_radius = float3::distance(closestPointToClosestPoint, closestPoint) / 2.0f; + *r_radius = math::distance(closestPointToClosestPoint, closestPoint) / 2.0f; } /* **** 4D Voronoi **** */ @@ -2096,7 +2093,7 @@ static float voronoi_distance(const float4 a, { switch (metric) { case NOISE_SHD_VORONOI_EUCLIDEAN: - return float4::distance(a, b); + return math::distance(a, b); case NOISE_SHD_VORONOI_MANHATTAN: return fabsf(a.x - b.x) + fabsf(a.y - b.y) + fabsf(a.z - b.z) + fabsf(a.w - b.w); case NOISE_SHD_VORONOI_CHEBYCHEV: @@ -2121,7 +2118,7 @@ void voronoi_f1(const float4 coord, float3 *r_color, float4 *r_position) { - const float4 cellPosition = float4::floor(coord); + const float4 cellPosition = math::floor(coord); const float4 localPosition = coord - cellPosition; float minDistance = 8.0f; @@ -2166,7 +2163,7 @@ void voronoi_smooth_f1(const float4 coord, float3 *r_color, float4 *r_position) { - const float4 cellPosition = float4::floor(coord); + const float4 cellPosition = math::floor(coord); const float4 localPosition = coord - cellPosition; const float smoothness_clamped = max_ff(smoothness, FLT_MIN); @@ -2191,10 +2188,10 @@ void voronoi_smooth_f1(const float4 coord, correctionFactor /= 1.0f + 3.0f * smoothness; if (r_color != nullptr) { const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset); - smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor; + smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor; } if (r_position != nullptr) { - smoothPosition = float4::interpolate(smoothPosition, pointPosition, h) - + smoothPosition = math::interpolate(smoothPosition, pointPosition, h) - correctionFactor; } } @@ -2221,7 +2218,7 @@ void voronoi_f2(const float4 coord, float3 *r_color, float4 *r_position) { - const float4 cellPosition = float4::floor(coord); + const float4 cellPosition = math::floor(coord); const float4 localPosition = coord - cellPosition; float distanceF1 = 8.0f; @@ -2270,7 +2267,7 @@ void voronoi_f2(const float4 coord, void voronoi_distance_to_edge(const float4 coord, const float randomness, float *r_distance) { - const float4 cellPosition = float4::floor(coord); + const float4 cellPosition = math::floor(coord); const float4 localPosition = coord - cellPosition; float4 vectorToClosest = float4(0.0f, 0.0f, 0.0f, 0.0f); @@ -2307,7 +2304,7 @@ void voronoi_distance_to_edge(const float4 coord, const float randomness, float const float4 perpendicularToEdge = vectorToPoint - vectorToClosest; if (dot_v4v4(perpendicularToEdge, perpendicularToEdge) > 0.0001f) { const float distanceToEdge = dot_v4v4((vectorToClosest + vectorToPoint) / 2.0f, - float4::normalize(perpendicularToEdge)); + math::normalize(perpendicularToEdge)); minDistance = std::min(minDistance, distanceToEdge); } } @@ -2319,7 +2316,7 @@ void voronoi_distance_to_edge(const float4 coord, const float randomness, float void voronoi_n_sphere_radius(const float4 coord, const float randomness, float *r_radius) { - const float4 cellPosition = float4::floor(coord); + const float4 cellPosition = math::floor(coord); const float4 localPosition = coord - cellPosition; float4 closestPoint = float4(0.0f, 0.0f, 0.0f, 0.0f); @@ -2333,7 +2330,7 @@ void voronoi_n_sphere_radius(const float4 coord, const float randomness, float * const float4 pointPosition = cellOffset + hash_float_to_float4(cellPosition + cellOffset) * randomness; - const float distanceToPoint = float4::distance(pointPosition, localPosition); + const float distanceToPoint = math::distance(pointPosition, localPosition); if (distanceToPoint < minDistance) { minDistance = distanceToPoint; closestPoint = pointPosition; @@ -2357,7 +2354,7 @@ void voronoi_n_sphere_radius(const float4 coord, const float randomness, float * const float4 pointPosition = cellOffset + hash_float_to_float4(cellPosition + cellOffset) * randomness; - const float distanceToPoint = float4::distance(closestPoint, pointPosition); + const float distanceToPoint = math::distance(closestPoint, pointPosition); if (distanceToPoint < minDistance) { minDistance = distanceToPoint; closestPointToClosestPoint = pointPosition; @@ -2366,7 +2363,7 @@ void voronoi_n_sphere_radius(const float4 coord, const float randomness, float * } } } - *r_radius = float4::distance(closestPointToClosestPoint, closestPoint) / 2.0f; + *r_radius = math::distance(closestPointToClosestPoint, closestPoint) / 2.0f; } /** \} */ diff --git a/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc b/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc index 70e3a99e57a..eac3faa6d15 100644 --- a/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc +++ b/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc @@ -21,10 +21,9 @@ extern "C" { #define DO_RANDOM_TESTS 0 #include "BLI_array.hh" -#include "BLI_double2.hh" #include "BLI_math_boolean.hh" #include "BLI_math_mpq.hh" -#include "BLI_mpq2.hh" +#include "BLI_math_vec_mpq_types.hh" #include "BLI_vector.hh" #include "BLI_delaunay_2d.h" diff --git a/source/blender/blenlib/tests/BLI_math_vec_types_test.cc b/source/blender/blenlib/tests/BLI_math_vec_types_test.cc new file mode 100644 index 00000000000..8aa1f90fde2 --- /dev/null +++ b/source/blender/blenlib/tests/BLI_math_vec_types_test.cc @@ -0,0 +1,149 @@ +/* Apache License, Version 2.0 */ + +#include "testing/testing.h" + +#include "BLI_math_vec_types.hh" + +namespace blender::tests { + +using namespace blender::math; + +TEST(math_vec_types, ScalarConstructorUnsigned) +{ + float2 u(5u); + EXPECT_EQ(u[0], 5.0f); + EXPECT_EQ(u[1], 5.0f); +} + +TEST(math_vec_types, ScalarConstructorInt) +{ + float2 i(-5); + EXPECT_EQ(i[0], -5.0f); + EXPECT_EQ(i[1], -5.0f); +} + +TEST(math_vec_types, ScalarConstructorFloat) +{ + float2 f(5.2f); + EXPECT_FLOAT_EQ(f[0], 5.2f); + EXPECT_FLOAT_EQ(f[1], 5.2f); +} + +TEST(math_vec_types, ScalarConstructorDouble) +{ + float2 d(5.2); + EXPECT_FLOAT_EQ(d[0], 5.2f); + EXPECT_FLOAT_EQ(d[1], 5.2f); +} + +TEST(math_vec_types, MultiScalarConstructorVec2) +{ + int2 i(5.5f, -1.8); + EXPECT_EQ(i[0], 5); + EXPECT_EQ(i[1], -1); +} + +TEST(math_vec_types, MultiScalarConstructorVec3) +{ + int3 i(5.5f, -1.8, 6u); + EXPECT_EQ(i[0], 5); + EXPECT_EQ(i[1], -1); + EXPECT_EQ(i[2], 6); +} + +TEST(math_vec_types, MultiScalarConstructorVec4) +{ + int4 i(5.5f, -1.8, 6u, 0.888f); + EXPECT_EQ(i[0], 5); + EXPECT_EQ(i[1], -1); + EXPECT_EQ(i[2], 6); + EXPECT_EQ(i[3], 0); +} + +TEST(math_vec_types, MixedScalarVectorConstructorVec3) +{ + float3 fl_v2(float2(5.5f), 1.8f); + EXPECT_FLOAT_EQ(fl_v2[0], 5.5f); + EXPECT_FLOAT_EQ(fl_v2[1], 5.5f); + EXPECT_FLOAT_EQ(fl_v2[2], 1.8f); + + float3 v2_fl(1.8f, float2(5.5f)); + EXPECT_FLOAT_EQ(v2_fl[0], 1.8f); + EXPECT_FLOAT_EQ(v2_fl[1], 5.5f); + EXPECT_FLOAT_EQ(v2_fl[2], 5.5f); +} + +TEST(math_vec_types, MixedScalarVectorConstructorVec4) +{ + int4 v2_fl_fl(float2(1), 2, 3); + EXPECT_EQ(v2_fl_fl[0], 1); + EXPECT_EQ(v2_fl_fl[1], 1); + EXPECT_EQ(v2_fl_fl[2], 2); + EXPECT_EQ(v2_fl_fl[3], 3); + + float4 fl_v2_fl(1, int2(2), 3); + EXPECT_EQ(fl_v2_fl[0], 1); + EXPECT_EQ(fl_v2_fl[1], 2); + EXPECT_EQ(fl_v2_fl[2], 2); + EXPECT_EQ(fl_v2_fl[3], 3); + + double4 fl_fl_v2(1, 2, double2(3)); + EXPECT_EQ(fl_fl_v2[0], 1); + EXPECT_EQ(fl_fl_v2[1], 2); + EXPECT_EQ(fl_fl_v2[2], 3); + EXPECT_EQ(fl_fl_v2[3], 3); + + int4 v2_v2(float2(1), uint2(2)); + EXPECT_EQ(v2_v2[0], 1); + EXPECT_EQ(v2_v2[1], 1); + EXPECT_EQ(v2_v2[2], 2); + EXPECT_EQ(v2_v2[3], 2); + + float4 v3_fl(uint3(1), 2); + EXPECT_EQ(v3_fl[0], 1); + EXPECT_EQ(v3_fl[1], 1); + EXPECT_EQ(v3_fl[2], 1); + EXPECT_EQ(v3_fl[3], 2); + + uint4 fl_v3(1, float3(2)); + EXPECT_EQ(fl_v3[0], 1); + EXPECT_EQ(fl_v3[1], 2); + EXPECT_EQ(fl_v3[2], 2); + EXPECT_EQ(fl_v3[3], 2); +} + +TEST(math_vec_types, ComponentMasking) +{ + int4 i(0, 1, 2, 3); + float2 f2 = float2(i); + EXPECT_EQ(f2[0], 0.0f); + EXPECT_EQ(f2[1], 1.0f); +} + +TEST(math_vec_types, PointerConversion) +{ + float array[3] = {1.0f, 2.0f, 3.0f}; + float3 farray(array); + EXPECT_EQ(farray[0], 1.0f); + EXPECT_EQ(farray[1], 2.0f); + EXPECT_EQ(farray[2], 3.0f); +} + +TEST(math_vec_types, PointerArrayConversion) +{ + float array[1][3] = {{1.0f, 2.0f, 3.0f}}; + float(*ptr)[3] = array; + float3 fptr(ptr); + EXPECT_EQ(fptr[0], 1.0f); + EXPECT_EQ(fptr[1], 2.0f); + EXPECT_EQ(fptr[2], 3.0f); +} + +TEST(math_vec_types, VectorTypeConversion) +{ + double2 d(int2(float2(5.75f, -1.57f))); + EXPECT_EQ(d[0], 5.0); + EXPECT_EQ(d[1], -1.0); +} + +} // namespace blender::tests diff --git a/source/blender/blenlib/tests/BLI_memory_utils_test.cc b/source/blender/blenlib/tests/BLI_memory_utils_test.cc index 207f310d902..74e54151a06 100644 --- a/source/blender/blenlib/tests/BLI_memory_utils_test.cc +++ b/source/blender/blenlib/tests/BLI_memory_utils_test.cc @@ -1,6 +1,6 @@ /* Apache License, Version 2.0 */ -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BLI_memory_utils.hh" #include "BLI_strict_flags.h" #include "testing/testing.h" diff --git a/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc b/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc index d759f0c3be4..2b8fb3dbea4 100644 --- a/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc +++ b/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc @@ -11,8 +11,8 @@ #include "BLI_array.hh" #include "BLI_map.hh" #include "BLI_math_mpq.hh" +#include "BLI_math_vec_mpq_types.hh" #include "BLI_mesh_boolean.hh" -#include "BLI_mpq3.hh" #include "BLI_vector.hh" #ifdef WITH_GMP diff --git a/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc b/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc index 68111fb8eb1..d2d76593129 100644 --- a/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc +++ b/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc @@ -10,8 +10,8 @@ #include "BLI_array.hh" #include "BLI_math_mpq.hh" +#include "BLI_math_vec_mpq_types.hh" #include "BLI_mesh_intersect.hh" -#include "BLI_mpq3.hh" #include "BLI_task.h" #include "BLI_vector.hh" diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 7865c79323d..85ea27b0f4e 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1186,6 +1186,7 @@ static BMO_FlagSet bmo_enum_triangulate_quad_method[] = { {MOD_TRIANGULATE_QUAD_FIXED, "FIXED"}, {MOD_TRIANGULATE_QUAD_ALTERNATE, "ALTERNATE"}, {MOD_TRIANGULATE_QUAD_SHORTEDGE, "SHORT_EDGE"}, + {MOD_TRIANGULATE_QUAD_LONGEDGE, "LONG_EDGE"}, {0, NULL}, }; diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index e9eaf865e3c..e7280303c26 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -1007,6 +1007,7 @@ void BM_face_triangulate(BMesh *bm, break; } case MOD_TRIANGULATE_QUAD_SHORTEDGE: + case MOD_TRIANGULATE_QUAD_LONGEDGE: case MOD_TRIANGULATE_QUAD_BEAUTY: default: { BMLoop *l_v3, *l_v4; @@ -1023,6 +1024,12 @@ void BM_face_triangulate(BMesh *bm, d2 = len_squared_v3v3(l_v1->v->co, l_v3->v->co); split_24 = ((d2 - d1) > 0.0f); } + else if (quad_method == MOD_TRIANGULATE_QUAD_LONGEDGE) { + float d1, d2; + d1 = len_squared_v3v3(l_v4->v->co, l_v2->v->co); + d2 = len_squared_v3v3(l_v1->v->co, l_v3->v->co); + split_24 = ((d2 - d1) < 0.0f); + } else { /* first check if the quad is concave on either diagonal */ const int flip_flag = is_quad_flip_v3( diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt index f59fd885871..af0ac6aee2e 100644 --- a/source/blender/compositor/CMakeLists.txt +++ b/source/blender/compositor/CMakeLists.txt @@ -40,6 +40,9 @@ set(INC ../../../intern/atomic ../../../intern/guardedalloc ../../../intern/clog + + # dna_type_offsets.h + ${CMAKE_CURRENT_BINARY_DIR}/../makesdna/intern ) set(INC_SYS @@ -147,6 +150,8 @@ set(SRC nodes/COM_TimeNode.h nodes/COM_ValueNode.cc nodes/COM_ValueNode.h + nodes/COM_SceneTimeNode.cc + nodes/COM_SceneTimeNode.h # output nodes nodes/COM_CompositorNode.cc @@ -645,6 +650,15 @@ endif() blender_add_lib(bf_compositor "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") +if(WITH_UNITY_BUILD) + set_target_properties(bf_compositor PROPERTIES UNITY_BUILD ON) + set_target_properties(bf_compositor PROPERTIES UNITY_BUILD_BATCH_SIZE 10) +endif() + +if(COMMAND target_precompile_headers) + target_precompile_headers(bf_compositor PRIVATE COM_precomp.h) +endif() + if(CXX_WARN_NO_SUGGEST_OVERRIDE) target_compile_options(bf_compositor PRIVATE "-Wsuggest-override") endif() diff --git a/source/blender/compositor/COM_defines.h b/source/blender/compositor/COM_defines.h index 1c3a28670df..794bf1b23bc 100644 --- a/source/blender/compositor/COM_defines.h +++ b/source/blender/compositor/COM_defines.h @@ -18,7 +18,7 @@ #pragma once -#include "BLI_float2.hh" +#include "BLI_math_vec_types.hh" #include "DNA_vec_types.h" diff --git a/source/blender/compositor/COM_precomp.h b/source/blender/compositor/COM_precomp.h new file mode 100644 index 00000000000..4d2681ea0cd --- /dev/null +++ b/source/blender/compositor/COM_precomp.h @@ -0,0 +1,33 @@ +/* Pre-compiled headers, see: D13797. */ + +#include <cfloat> +#include <climits> +#include <cmath> +#include <cstdio> +#include <cstdlib> +#include <cstring> +#include <functional> +#include <iostream> +#include <iterator> +#include <list> +#include <map> +#include <ostream> +#include <set> +#include <string> + +#include "COM_ConstantOperation.h" +#include "COM_ConvertOperation.h" +#include "COM_Debug.h" +#include "COM_Enums.h" +#include "COM_ExecutionGroup.h" +#include "COM_ExecutionSystem.h" +#include "COM_MultiThreadedOperation.h" +#include "COM_Node.h" +#include "COM_NodeOperation.h" +#include "COM_OpenCLDevice.h" +#include "COM_SetAlphaMultiplyOperation.h" +#include "COM_SetColorOperation.h" +#include "COM_SetSamplerOperation.h" +#include "COM_SetValueOperation.h" +#include "COM_SetVectorOperation.h" +#include "COM_defines.h" diff --git a/source/blender/compositor/intern/COM_Converter.cc b/source/blender/compositor/intern/COM_Converter.cc index 1b98a04cf96..6cf6c698a2f 100644 --- a/source/blender/compositor/intern/COM_Converter.cc +++ b/source/blender/compositor/intern/COM_Converter.cc @@ -94,6 +94,7 @@ #include "COM_RotateNode.h" #include "COM_ScaleNode.h" #include "COM_ScaleOperation.h" +#include "COM_SceneTimeNode.h" #include "COM_SeparateColorNode.h" #include "COM_SetAlphaNode.h" #include "COM_SetValueOperation.h" @@ -360,6 +361,9 @@ Node *COM_convert_bnode(bNode *b_node) case CMP_NODE_TRANSFORM: node = new TransformNode(b_node); break; + case CMP_NODE_SCENE_TIME: + node = new SceneTimeNode(b_node); + break; case CMP_NODE_STABILIZE2D: node = new Stabilize2dNode(b_node); break; diff --git a/source/blender/compositor/nodes/COM_SceneTimeNode.cc b/source/blender/compositor/nodes/COM_SceneTimeNode.cc new file mode 100644 index 00000000000..f495db5ed4c --- /dev/null +++ b/source/blender/compositor/nodes/COM_SceneTimeNode.cc @@ -0,0 +1,50 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#include "COM_SceneTimeNode.h" + +#include "COM_SetValueOperation.h" + +namespace blender::compositor { + +SceneTimeNode::SceneTimeNode(bNode *editor_node) : Node(editor_node) +{ + /* pass */ +} + +void SceneTimeNode::convert_to_operations(NodeConverter &converter, + const CompositorContext &context) const +{ + SetValueOperation *SecondOperation = new SetValueOperation(); + SetValueOperation *frameOperation = new SetValueOperation(); + + const int frameNumber = context.get_framenumber(); + const Scene* scene = context.get_scene(); + const double frameRate = (((double)scene->r.frs_sec) / (double)scene->r.frs_sec_base); + + SecondOperation->set_value(float(frameNumber / frameRate)); + converter.add_operation(SecondOperation); + + frameOperation->set_value(frameNumber); + converter.add_operation(frameOperation); + + converter.map_output_socket(get_output_socket(0), SecondOperation->get_output_socket()); + converter.map_output_socket(get_output_socket(1), frameOperation->get_output_socket()); +} + +} // namespace blender::compositor diff --git a/source/blender/compositor/nodes/COM_SceneTimeNode.h b/source/blender/compositor/nodes/COM_SceneTimeNode.h new file mode 100644 index 00000000000..62c502d26d2 --- /dev/null +++ b/source/blender/compositor/nodes/COM_SceneTimeNode.h @@ -0,0 +1,36 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#pragma once + +#include "COM_Node.h" + +namespace blender::compositor { + +/** + * \brief SceneTimeNode + * \ingroup Node + */ +class SceneTimeNode : public Node { + public: + SceneTimeNode(bNode *editor_node); + void convert_to_operations(NodeConverter &converter, + const CompositorContext &context) const override; +}; + +} // namespace blender::compositor diff --git a/source/blender/compositor/operations/COM_KeyingScreenOperation.cc b/source/blender/compositor/operations/COM_KeyingScreenOperation.cc index aa92c5c0c2b..5d12f29b83f 100644 --- a/source/blender/compositor/operations/COM_KeyingScreenOperation.cc +++ b/source/blender/compositor/operations/COM_KeyingScreenOperation.cc @@ -18,6 +18,8 @@ #include "COM_KeyingScreenOperation.h" +#include "DNA_defaults.h" + #include "BKE_movieclip.h" #include "BKE_tracking.h" @@ -75,7 +77,7 @@ void KeyingScreenOperation::deinit_execution() KeyingScreenOperation::TriangulationData *KeyingScreenOperation::build_voronoi_triangulation() { - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); TriangulationData *triangulation; MovieTracking *tracking = &movie_clip_->tracking; MovieTrackingTrack *track; @@ -301,7 +303,7 @@ void KeyingScreenOperation::determine_canvas(const rcti &preferred_area, rcti &r r_area = COM_AREA_NONE; if (movie_clip_) { - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); int width, height; int clip_frame = BKE_movieclip_remap_scene_to_clip_frame(movie_clip_, framenumber_); diff --git a/source/blender/compositor/operations/COM_MovieDistortionOperation.cc b/source/blender/compositor/operations/COM_MovieDistortionOperation.cc index d04a970bc03..b25073394a2 100644 --- a/source/blender/compositor/operations/COM_MovieDistortionOperation.cc +++ b/source/blender/compositor/operations/COM_MovieDistortionOperation.cc @@ -18,6 +18,8 @@ #include "COM_MovieDistortionOperation.h" +#include "DNA_defaults.h" + #include "BKE_movieclip.h" namespace blender::compositor { @@ -36,7 +38,7 @@ void MovieDistortionOperation::init_data() { if (movie_clip_) { MovieTracking *tracking = &movie_clip_->tracking; - MovieClipUser clip_user = {0}; + MovieClipUser clip_user = *DNA_struct_default_get(MovieClipUser); int calibration_width, calibration_height; BKE_movieclip_user_set_frame(&clip_user, framenumber_); diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.h b/source/blender/compositor/operations/COM_OutputFileOperation.h index 0e871f47b87..e601ebac4e1 100644 --- a/source/blender/compositor/operations/COM_OutputFileOperation.h +++ b/source/blender/compositor/operations/COM_OutputFileOperation.h @@ -136,7 +136,7 @@ void add_exr_channels(void *exrhandle, const char *layer_name, const DataType datatype, const char *view_name, - const size_t width, + size_t width, bool use_half_float, float *buf); void free_exr_channels(void *exrhandle, diff --git a/source/blender/compositor/operations/COM_PlaneTrackOperation.cc b/source/blender/compositor/operations/COM_PlaneTrackOperation.cc index 28da200c615..cb73fa9af7b 100644 --- a/source/blender/compositor/operations/COM_PlaneTrackOperation.cc +++ b/source/blender/compositor/operations/COM_PlaneTrackOperation.cc @@ -18,6 +18,8 @@ #include "COM_PlaneTrackOperation.h" +#include "DNA_defaults.h" + #include "BKE_movieclip.h" #include "BKE_tracking.h" @@ -80,7 +82,7 @@ void PlaneTrackCommon::determine_canvas(const rcti &preferred_area, rcti &r_area r_area = COM_AREA_NONE; if (movie_clip_) { int width, height; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); BKE_movieclip_user_set_frame(&user, framenumber_); BKE_movieclip_get_size(movie_clip_, &user, &width, &height); r_area = preferred_area; diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.cc b/source/blender/compositor/operations/COM_TrackPositionOperation.cc index fc6be97a29c..61ce750a2f4 100644 --- a/source/blender/compositor/operations/COM_TrackPositionOperation.cc +++ b/source/blender/compositor/operations/COM_TrackPositionOperation.cc @@ -18,6 +18,8 @@ #include "COM_TrackPositionOperation.h" +#include "DNA_defaults.h" + #include "BKE_movieclip.h" #include "BKE_node.h" #include "BKE_tracking.h" @@ -50,7 +52,7 @@ void TrackPositionOperation::calc_track_position() { is_track_position_calculated_ = true; MovieTracking *tracking = nullptr; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); MovieTrackingObject *object; track_position_ = 0; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 1c09417e9ab..fcdc3fe58e8 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1475,6 +1475,17 @@ void DepsgraphRelationBuilder::build_animation_images(ID *id) id, NodeType::IMAGE_ANIMATION, OperationCode::IMAGE_ANIMATION); TimeSourceKey time_src_key; add_relation(time_src_key, image_animation_key, "TimeSrc -> Image Animation"); + + /* The image users of these ids may change during evaluation. Make sure that the image + * animation update happens after evaluation. */ + if (GS(id->name) == ID_MA) { + OperationKey material_update_key(id, NodeType::SHADING, OperationCode::MATERIAL_UPDATE); + add_relation(material_update_key, image_animation_key, "Material Update -> Image Animation"); + } + else if (GS(id->name) == ID_WO) { + OperationKey world_update_key(id, NodeType::SHADING, OperationCode::WORLD_UPDATE); + add_relation(world_update_key, image_animation_key, "World Update -> Image Animation"); + } } } diff --git a/source/blender/depsgraph/intern/node/deg_node_factory.h b/source/blender/depsgraph/intern/node/deg_node_factory.h index 125f340a0fa..b3153a7ddfb 100644 --- a/source/blender/depsgraph/intern/node/deg_node_factory.h +++ b/source/blender/depsgraph/intern/node/deg_node_factory.h @@ -55,7 +55,7 @@ template<class ModeObjectType> struct DepsNodeFactoryImpl : public DepsNodeFacto void register_node_typeinfo(DepsNodeFactory *factory); /* Get typeinfo for specified type */ -DepsNodeFactory *type_get_factory(const NodeType type); +DepsNodeFactory *type_get_factory(NodeType type); } // namespace deg } // namespace blender diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index 2a243eb9202..7b55981ba6b 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -197,6 +197,7 @@ set(SRC DRW_engine.h DRW_select_buffer.h + intern/DRW_gpu_wrapper.hh intern/DRW_render.h intern/draw_cache.h intern/draw_cache_extract.h diff --git a/source/blender/draw/intern/DRW_gpu_wrapper.hh b/source/blender/draw/intern/DRW_gpu_wrapper.hh new file mode 100644 index 00000000000..01c57406dac --- /dev/null +++ b/source/blender/draw/intern/DRW_gpu_wrapper.hh @@ -0,0 +1,812 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#pragma once + +/** \file + * \ingroup draw + * + * Wrapper classes that make it easier to use GPU objects in C++. + * + * All Buffers need to be sent to GPU memory before being used. This is done by using the + * `push_update()`. + * + * A Storage[Array]Buffer can hold much more data than a Uniform[Array]Buffer + * which can only holds 16KB of data. + * + * All types are not copyable and Buffers are not Movable. + * + * drw::UniformArrayBuffer<T, len> + * Uniform buffer object containing an array of T with len elements. + * Data can be accessed using the [] operator. + * + * drw::UniformBuffer<T> + * A uniform buffer object class inheriting from T. + * Data can be accessed just like a normal T object. + * + * drw::StorageArrayBuffer<T, len> + * Storage buffer object containing an array of T with len elements. + * The item count can be changed after creation using `resize()`. + * However, this requires the invalidation of the whole buffer and + * discarding all data inside it. + * Data can be accessed using the [] operator. + * + * drw::StorageBuffer<T> + * A storage buffer object class inheriting from T. + * Data can be accessed just like a normal T object. + * + * drw::Texture + * A simple wrapper to GPUTexture. A drw::Texture can be created without allocation. + * The `ensure_[1d|2d|3d|cube][_array]()` method is here to make sure the underlying texture + * will meet the requirements and create (or recreate) the GPUTexture if needed. + * + * drw::TextureFromPool + * A GPUTexture from the viewport texture pool. This texture can be shared with other engines + * and its content is undefined when aquiring it. + * A drw::TextureFromPool is acquired for rendering using `acquire()` and released once the + * rendering is done using `release()`. The same texture can be acquired & released multiple + * time in one draw loop. + * The `sync()` method *MUST* be called once during the cache populate (aka: Sync) phase. + * + * drw::Framebuffer + * Simple wrapper to GPUFramebuffer that can be moved. + * + */ + +#include "MEM_guardedalloc.h" + +#include "draw_texture_pool.h" + +#include "BLI_float4.hh" +#include "BLI_int2.hh" +#include "BLI_int3.hh" +#include "BLI_int4.hh" +#include "BLI_span.hh" +#include "BLI_utildefines.h" +#include "BLI_utility_mixins.hh" + +#include "GPU_framebuffer.h" +#include "GPU_texture.h" +#include "GPU_uniform_buffer.h" +#include "GPU_vertex_buffer.h" + +namespace blender::draw { + +/* -------------------------------------------------------------------- */ +/** \name Implementation Details + * \{ */ + +namespace detail { + +template< + /** Type of the values stored in this uniform buffer. */ + typename T, + /** The number of values that can be stored in this uniform buffer. */ + int64_t len, + /** True if the buffer only resides on GPU memory and cannot be accessed. */ + bool device_only> +class DataBuffer { + protected: + T *data_ = nullptr; + int64_t len_ = len; + + BLI_STATIC_ASSERT((sizeof(T) % 16) == 0, "Type need to be aligned to size of float4."); + + public: + /** + * Get the value at the given index. This invokes undefined behavior when the + * index is out of bounds. + */ + const T &operator[](int64_t index) const + { + BLI_STATIC_ASSERT(!device_only, ""); + BLI_assert(index >= 0); + BLI_assert(index < len); + return data_[index]; + } + + T &operator[](int64_t index) + { + BLI_STATIC_ASSERT(!device_only, ""); + BLI_assert(index >= 0); + BLI_assert(index < len); + return data_[index]; + } + + /** + * Get a pointer to the beginning of the array. + */ + const T *data() const + { + BLI_STATIC_ASSERT(!device_only, ""); + return data_; + } + T *data() + { + BLI_STATIC_ASSERT(!device_only, ""); + return data_; + } + + /** + * Iterator + */ + const T *begin() const + { + BLI_STATIC_ASSERT(!device_only, ""); + return data_; + } + const T *end() const + { + BLI_STATIC_ASSERT(!device_only, ""); + return data_ + len; + } + + T *begin() + { + BLI_STATIC_ASSERT(!device_only, ""); + return data_; + } + T *end() + { + BLI_STATIC_ASSERT(!device_only, ""); + return data_ + len; + } + + operator Span<T>() const + { + BLI_STATIC_ASSERT(!device_only, ""); + return Span<T>(data_, len); + } +}; + +template<typename T, int64_t len, bool device_only> +class UniformCommon : public DataBuffer<T, len, false>, NonMovable, NonCopyable { + protected: + GPUUniformBuf *ubo_; + +#ifdef DEBUG + const char *name_ = typeid(T).name(); +#else + constexpr static const char *name_ = "UniformBuffer"; +#endif + + public: + UniformCommon() + { + ubo_ = GPU_uniformbuf_create_ex(sizeof(T) * len, nullptr, name_); + } + + ~UniformCommon() + { + GPU_uniformbuf_free(ubo_); + } + + void push_update(void) + { + GPU_uniformbuf_update(ubo_, this->data_); + } + + /* To be able to use it with DRW_shgroup_*_ref(). */ + operator GPUUniformBuf *() const + { + return ubo_; + } + + /* To be able to use it with DRW_shgroup_*_ref(). */ + GPUUniformBuf **operator&() + { + return &ubo_; + } +}; + +template<typename T, int64_t len, bool device_only> +class StorageCommon : public DataBuffer<T, len, false>, NonMovable, NonCopyable { + protected: + /* Use vertex buffer for now. Until there is a complete GPUStorageBuf implementation. */ + GPUVertBuf *ssbo_; + +#ifdef DEBUG + const char *name_ = typeid(T).name(); +#else + constexpr static const char *name_ = "StorageBuffer"; +#endif + + public: + StorageCommon() + { + init(len); + } + + ~StorageCommon() + { + GPU_vertbuf_discard(ssbo_); + } + + void resize(int64_t new_size) + { + BLI_assert(new_size > 0); + if (new_size != this->len_) { + GPU_vertbuf_discard(ssbo_); + this->init(new_size); + } + } + + operator GPUVertBuf *() const + { + return ssbo_; + } + /* To be able to use it with DRW_shgroup_*_ref(). */ + GPUVertBuf **operator&() + { + return &ssbo_; + } + + private: + void init(int64_t new_size) + { + this->len_ = new_size; + + GPUVertFormat format = {0}; + GPU_vertformat_attr_add(&format, "dummy", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); + + GPUUsageType usage = device_only ? GPU_USAGE_DEVICE_ONLY : GPU_USAGE_DYNAMIC; + ssbo_ = GPU_vertbuf_create_with_format_ex(&format, usage); + GPU_vertbuf_data_alloc(ssbo_, divide_ceil_u(sizeof(T) * this->len_, 4)); + if (!device_only) { + this->data_ = (T *)GPU_vertbuf_get_data(ssbo_); + GPU_vertbuf_use(ssbo_); + } + } +}; + +} // namespace detail + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Uniform Buffers + * \{ */ + +template< + /** Type of the values stored in this uniform buffer. */ + typename T, + /** The number of values that can be stored in this uniform buffer. */ + int64_t len + /** True if the buffer only resides on GPU memory and cannot be accessed. */ + /* TODO(fclem): Currently unsupported. */ + /* bool device_only = false */> +class UniformArrayBuffer : public detail::UniformCommon<T, len, false> { + public: + UniformArrayBuffer() + { + /* TODO(fclem) We should map memory instead. */ + this->data_ = MEM_mallocN_aligned(this->name_); + } +}; + +template< + /** Type of the values stored in this uniform buffer. */ + typename T + /** True if the buffer only resides on GPU memory and cannot be accessed. */ + /* TODO(fclem): Currently unsupported. */ + /* bool device_only = false */> +class UniformBuffer : public T, public detail::UniformCommon<T, 1, false> { + public: + UniformBuffer() + { + /* TODO(fclem) How could we map this? */ + this->data_ = static_cast<T *>(this); + } + + UniformBuffer<T> &operator=(const T &other) + { + *static_cast<T *>(this) = other; + return *this; + } +}; + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Storage Buffer + * \{ */ + +template< + /** Type of the values stored in this uniform buffer. */ + typename T, + /** The number of values that can be stored in this uniform buffer. */ + int64_t len, + /** True if created on device and no memory host memory is allocated. */ + bool device_only = false> +class StorageArrayBuffer : public detail::StorageCommon<T, len, device_only> { + public: + void push_update(void) + { + BLI_assert(!device_only); + /* Get the data again to tag for update. The actual pointer should not + * change. */ + this->data_ = (T *)GPU_vertbuf_get_data(this->ssbo_); + GPU_vertbuf_use(this->ssbo_); + } +}; + +template< + /** Type of the values stored in this uniform buffer. */ + typename T, + /** True if created on device and no memory host memory is allocated. */ + bool device_only = false> +class StorageBuffer : public T, public detail::StorageCommon<T, 1, device_only> { + public: + void push_update(void) + { + BLI_assert(!device_only); + /* TODO(fclem): Avoid a full copy. */ + T &vert_data = *(T *)GPU_vertbuf_get_data(this->ssbo_); + vert_data = *this; + + GPU_vertbuf_use(this->ssbo_); + } + + StorageBuffer<T> &operator=(const T &other) + { + *static_cast<T *>(this) = other; + return *this; + } +}; + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Texture + * \{ */ + +class Texture : NonCopyable { + protected: + GPUTexture *tx_ = nullptr; + const char *name_; + + public: + Texture(const char *name = "gpu::Texture") : name_(name) + { + } + + Texture(const char *name, + eGPUTextureFormat format, + int extent, + float *data = nullptr, + bool cubemap = false, + int mips = 1) + : name_(name) + { + tx_ = create(extent, 0, 0, mips, format, data, false, cubemap); + } + + Texture(const char *name, + eGPUTextureFormat format, + int extent, + int layers, + float *data = nullptr, + bool cubemap = false, + int mips = 1) + : name_(name) + { + tx_ = create(extent, layers, 0, mips, format, data, true, cubemap); + } + + Texture( + const char *name, eGPUTextureFormat format, int2 extent, float *data = nullptr, int mips = 1) + : name_(name) + { + tx_ = create(UNPACK2(extent), 0, mips, format, data, false, false); + } + + Texture(const char *name, + eGPUTextureFormat format, + int2 extent, + int layers, + float *data = nullptr, + int mips = 1) + : name_(name) + { + tx_ = create(UNPACK2(extent), layers, mips, format, data, true, false); + } + + Texture( + const char *name, eGPUTextureFormat format, int3 extent, float *data = nullptr, int mips = 1) + : name_(name) + { + tx_ = create(UNPACK3(extent), mips, format, data, false, false); + } + + ~Texture() + { + free(); + } + + /* To be able to use it with DRW_shgroup_uniform_texture(). */ + operator GPUTexture *() const + { + BLI_assert(tx_ != nullptr); + return tx_; + } + + /* To be able to use it with DRW_shgroup_uniform_texture_ref(). */ + GPUTexture **operator&() + { + return &tx_; + } + + Texture &operator=(Texture &&a) + { + if (*this != a) { + this->tx_ = a.tx_; + this->name_ = a.name_; + a.tx_ = nullptr; + } + return *this; + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_1d(eGPUTextureFormat format, int extent, float *data = nullptr, int mips = 1) + { + return ensure_impl(extent, 0, 0, mips, format, data, false, false); + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_1d_array( + eGPUTextureFormat format, int extent, int layers, float *data = nullptr, int mips = 1) + { + return ensure_impl(extent, layers, 0, mips, format, data, true, false); + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_2d(eGPUTextureFormat format, const int2 &extent, float *data = nullptr, int mips = 1) + { + return ensure_impl(UNPACK2(extent), 0, mips, format, data, false, false); + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_2d_array(eGPUTextureFormat format, + const int2 &extent, + int layers, + float *data = nullptr, + int mips = 1) + { + return ensure_impl(UNPACK2(extent), layers, mips, format, data, true, false); + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_3d(eGPUTextureFormat format, const int3 &extent, float *data = nullptr, int mips = 1) + { + return ensure_impl(UNPACK3(extent), mips, format, data, false, false); + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_cube(eGPUTextureFormat format, int extent, float *data = nullptr, int mips = 1) + { + return ensure_impl(extent, extent, 0, mips, format, data, false, true); + } + + /** + * Ensure the texture has the correct properties. Recreating it if needed. + * Return true if a texture has been created. + */ + bool ensure_cube_array( + eGPUTextureFormat format, int extent, int layers, float *data = nullptr, int mips = 1) + { + return ensure_impl(extent, extent, layers, mips, format, data, false, true); + } + + /** + * Returns true if the texture has been allocated or acquired from the pool. + */ + bool is_valid(void) const + { + return tx_ != nullptr; + } + + int width(void) const + { + return GPU_texture_width(tx_); + } + + int height(void) const + { + return GPU_texture_height(tx_); + } + + bool depth(void) const + { + return GPU_texture_depth(tx_); + } + + bool is_stencil(void) const + { + return GPU_texture_stencil(tx_); + } + + bool is_integer(void) const + { + return GPU_texture_integer(tx_); + } + + bool is_cube(void) const + { + return GPU_texture_cube(tx_); + } + + bool is_array(void) const + { + return GPU_texture_array(tx_); + } + + int3 size(int miplvl = 0) const + { + int3 size(0); + GPU_texture_get_mipmap_size(tx_, miplvl, size); + return size; + } + + /** + * Clear the entirety of the texture using one pixel worth of data. + */ + void clear(float4 values) + { + GPU_texture_clear(tx_, GPU_DATA_FLOAT, &values[0]); + } + + /** + * Clear the entirety of the texture using one pixel worth of data. + */ + void clear(uint4 values) + { + GPU_texture_clear(tx_, GPU_DATA_UINT, &values[0]); + } + + /** + * Clear the entirety of the texture using one pixel worth of data. + */ + void clear(uchar4 values) + { + GPU_texture_clear(tx_, GPU_DATA_UBYTE, &values[0]); + } + + /** + * Clear the entirety of the texture using one pixel worth of data. + */ + void clear(int4 values) + { + GPU_texture_clear(tx_, GPU_DATA_INT, &values[0]); + } + + /** + * Returns a buffer containing the texture data for the specified miplvl. + * The memory block needs to be manually freed by MEM_freeN(). + */ + template<typename T> T *read(eGPUDataFormat format, int miplvl = 0) + { + return reinterpret_cast<T *>(GPU_texture_read(tx_, format, miplvl)); + } + + void filter_mode(bool do_filter) + { + GPU_texture_filter_mode(tx_, do_filter); + } + + /** + * Free the internal texture but not the drw::Texture itself. + */ + void free() + { + GPU_TEXTURE_FREE_SAFE(tx_); + } + + private: + bool ensure_impl(int w, + int h = 0, + int d = 0, + int mips = 1, + eGPUTextureFormat format = GPU_RGBA8, + float *data = nullptr, + bool layered = false, + bool cubemap = false) + + { + /* TODO(fclem) In the future, we need to check if mip_count did not change. + * For now it's ok as we always define all mip level.*/ + if (tx_) { + int3 size = this->size(); + if (size != int3(w, h, d) || GPU_texture_format(tx_) != format || + GPU_texture_cube(tx_) != cubemap || GPU_texture_array(tx_) != layered) { + GPU_TEXTURE_FREE_SAFE(tx_); + } + } + if (tx_ == nullptr) { + tx_ = create(w, h, d, mips, format, data, layered, cubemap); + if (mips > 1) { + /* TODO(fclem) Remove once we have immutable storage or when mips are + * generated on creation. */ + GPU_texture_generate_mipmap(tx_); + } + return true; + } + return false; + } + + GPUTexture *create(int w, + int h, + int d, + int mips, + eGPUTextureFormat format, + float *data, + bool layered, + bool cubemap) + { + if (h == 0) { + return GPU_texture_create_1d(name_, w, mips, format, data); + } + else if (d == 0) { + if (layered) { + return GPU_texture_create_1d_array(name_, w, h, mips, format, data); + } + else { + return GPU_texture_create_2d(name_, w, h, mips, format, data); + } + } + else if (cubemap) { + if (layered) { + return GPU_texture_create_cube_array(name_, w, d, mips, format, data); + } + else { + return GPU_texture_create_cube(name_, w, mips, format, data); + } + } + else { + if (layered) { + return GPU_texture_create_2d_array(name_, w, h, d, mips, format, data); + } + else { + return GPU_texture_create_3d(name_, w, h, d, mips, format, GPU_DATA_FLOAT, data); + } + } + } +}; + +class TextureFromPool : public Texture, NonMovable { + private: + GPUTexture *tx_tmp_saved_ = nullptr; + + public: + TextureFromPool(const char *name = "gpu::Texture") : Texture(name){}; + + /* Always use `release()` after rendering. */ + void acquire(int w, int h, eGPUTextureFormat format, void *owner_) + { + if (this->tx_ == nullptr) { + if (tx_tmp_saved_ != nullptr) { + this->tx_ = tx_tmp_saved_; + return; + } + DrawEngineType *owner = (DrawEngineType *)owner_; + this->tx_ = DRW_texture_pool_query_2d(w, h, format, owner); + } + } + + void release(void) + { + tx_tmp_saved_ = this->tx_; + this->tx_ = nullptr; + } + + /** + * Clears any reference. Workaround for pool texture not being able to release on demand. + * Needs to be called at during the sync phase. + */ + void sync(void) + { + tx_tmp_saved_ = nullptr; + } + + /** Remove methods that are forbidden with this type of textures. */ + bool ensure_1d(int, int, eGPUTextureFormat, float *) = delete; + bool ensure_1d_array(int, int, int, eGPUTextureFormat, float *) = delete; + bool ensure_2d(int, int, int, eGPUTextureFormat, float *) = delete; + bool ensure_2d_array(int, int, int, int, eGPUTextureFormat, float *) = delete; + bool ensure_3d(int, int, int, int, eGPUTextureFormat, float *) = delete; + bool ensure_cube(int, int, eGPUTextureFormat, float *) = delete; + bool ensure_cube_array(int, int, int, eGPUTextureFormat, float *) = delete; + void filter_mode(bool) = delete; + void free() = delete; + /** + * Forbid the use of DRW_shgroup_uniform_texture. + * Use DRW_shgroup_uniform_texture_ref instead. + */ + operator GPUTexture *() const = delete; +}; + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Framebuffer + * \{ */ + +class Framebuffer : NonCopyable { + private: + GPUFrameBuffer *fb_ = nullptr; + const char *name_; + + public: + Framebuffer() : name_(""){}; + Framebuffer(const char *name) : name_(name){}; + + ~Framebuffer() + { + GPU_FRAMEBUFFER_FREE_SAFE(fb_); + } + + void ensure(GPUAttachment depth = GPU_ATTACHMENT_NONE, + GPUAttachment color1 = GPU_ATTACHMENT_NONE, + GPUAttachment color2 = GPU_ATTACHMENT_NONE, + GPUAttachment color3 = GPU_ATTACHMENT_NONE, + GPUAttachment color4 = GPU_ATTACHMENT_NONE, + GPUAttachment color5 = GPU_ATTACHMENT_NONE, + GPUAttachment color6 = GPU_ATTACHMENT_NONE, + GPUAttachment color7 = GPU_ATTACHMENT_NONE, + GPUAttachment color8 = GPU_ATTACHMENT_NONE) + { + GPU_framebuffer_ensure_config( + &fb_, {depth, color1, color2, color3, color4, color5, color6, color7, color8}); + } + + Framebuffer &operator=(Framebuffer &&a) + { + if (*this != a) { + this->fb_ = a.fb_; + this->name_ = a.name_; + a.fb_ = nullptr; + } + return *this; + } + + operator GPUFrameBuffer *() const + { + return fb_; + } +}; + +/** \} */ + +} // namespace blender::draw diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc b/source/blender/draw/intern/draw_cache_impl_curve.cc index 1108d40125b..33cf0e9a3cd 100644 --- a/source/blender/draw/intern/draw_cache_impl_curve.cc +++ b/source/blender/draw/intern/draw_cache_impl_curve.cc @@ -26,8 +26,8 @@ #include "MEM_guardedalloc.h" #include "BLI_array.hh" -#include "BLI_float3.hh" #include "BLI_listbase.h" +#include "BLI_math_vec_types.hh" #include "BLI_math_vector.h" #include "BLI_span.hh" #include "BLI_utildefines.h" diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc index ea702e5efdd..b846da3f016 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc @@ -25,9 +25,7 @@ #include <functional> -#include "BLI_float2.hh" -#include "BLI_float3.hh" -#include "BLI_float4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_string.h" #include "BKE_attribute.h" diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 73a94f066e3..79dda480a0a 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -54,6 +54,7 @@ #include "BKE_deform.h" #include "BKE_global.h" #include "BKE_gpencil.h" +#include "BKE_gpencil_curve.h" #include "BKE_gpencil_geom.h" #include "BKE_layer.h" #include "BKE_main.h" @@ -834,7 +835,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p, /* color strength */ if (brush_settings->flag & GP_BRUSH_USE_STRENGTH_PRESSURE) { pt->strength *= BKE_curvemapping_evaluateF(brush_settings->curve_strength, 0, pressure); - CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f); + CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f); } /* Set vertex colors for buffer. */ @@ -918,6 +919,19 @@ static short gpencil_stroke_addpoint(tGPsdata *p, return GP_STROKEADD_INVALID; } +static void gpencil_stroke_unselect(bGPdata *gpd, bGPDstroke *gps) +{ + gps->flag &= ~GP_STROKE_SELECT; + BKE_gpencil_stroke_select_index_reset(gps); + for (int i = 0; i < gps->totpoints; i++) { + gps->points[i].flag &= ~GP_SPOINT_SELECT; + } + /* Update the selection from the stroke to the curve. */ + if (gps->editcurve) { + BKE_gpencil_editcurve_stroke_sync_selection(gpd, gps, gps->editcurve); + } +} + /* make a new stroke from the buffer data */ static void gpencil_stroke_newfrombuffer(tGPsdata *p) { @@ -928,6 +942,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) tGPspoint *ptc; MDeformVert *dvert = NULL; Brush *brush = p->brush; + BrushGpencilSettings *brush_settings = brush->gpencil_settings; ToolSettings *ts = p->scene->toolsettings; Depsgraph *depsgraph = p->depsgraph; Object *obact = (Object *)p->ownerPtr.data; @@ -1016,7 +1031,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) /* copy pressure and time */ pt->pressure = ptc->pressure; pt->strength = ptc->strength; - CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f); + CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f); copy_v4_v4(pt->vert_color, ptc->vert_color); pt->time = ptc->time; /* Apply the vertex color to point. */ @@ -1050,7 +1065,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) /* copy pressure and time */ pt->pressure = ptc->pressure; pt->strength = ptc->strength; - CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f); + CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f); pt->time = ptc->time; /* Apply the vertex color to point. */ ED_gpencil_point_vertex_color_set(ts, brush, pt, ptc); @@ -1175,7 +1190,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) /* copy pressure and time */ pt->pressure = ptc->pressure; pt->strength = ptc->strength; - CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f); + CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f); copy_v4_v4(pt->vert_color, ptc->vert_color); pt->time = ptc->time; pt->uv_fac = ptc->uv_fac; @@ -1300,7 +1315,12 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) ctrl2, GPENCIL_MINIMUM_JOIN_DIST, &pt_index); + if (gps_target != NULL) { + /* Unselect all points of source and destination strokes. This is required to avoid + * a change in the resolution of the original strokes during the join. */ + gpencil_stroke_unselect(gpd, gps); + gpencil_stroke_unselect(gpd, gps_target); gps = ED_gpencil_stroke_join_and_trim(p->gpd, p->gpf, gps, gps_target, pt_index); } else { diff --git a/source/blender/editors/include/ED_util.h b/source/blender/editors/include/ED_util.h index 8a669a2afc2..6bcddfa631a 100644 --- a/source/blender/editors/include/ED_util.h +++ b/source/blender/editors/include/ED_util.h @@ -102,7 +102,7 @@ void ED_slider_destroy(struct bContext *C, struct tSlider *slider); */ void ED_slider_status_string_get(const struct tSlider *slider, char *status_string, - const size_t size_of_status_string); + size_t size_of_status_string); float ED_slider_factor_get(struct tSlider *slider); void ED_slider_factor_set(struct tSlider *slider, float factor); diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index f01b8318e98..9ce07cd2e07 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -495,7 +495,7 @@ float UI_text_clip_middle_ex(const struct uiFontStyle *fstyle, char *str, float okwidth, float minwidth, - const size_t max_len, + size_t max_len, char rpart_sep); /** @@ -2957,15 +2957,17 @@ void UI_fontstyle_set(const struct uiFontStyle *fs); void UI_fontstyle_draw_ex(const struct uiFontStyle *fs, const struct rcti *rect, const char *str, + size_t str_len, const uchar col[4], const struct uiFontStyleDraw_Params *fs_params, - size_t len, int *r_xofs, int *r_yofs, struct ResultBLF *r_info); + void UI_fontstyle_draw(const struct uiFontStyle *fs, const struct rcti *rect, const char *str, + size_t str_len, const uchar col[4], const struct uiFontStyleDraw_Params *fs_params); /** diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 027f03d05c7..923f741e3ae 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -688,11 +688,11 @@ extern void ui_hsvcube_pos_from_vals( */ extern void ui_but_string_get_ex(uiBut *but, char *str, - const size_t maxlen, + size_t maxlen, int float_precision, bool use_exp_float, bool *r_use_exp_float) ATTR_NONNULL(1, 2); -extern void ui_but_string_get(uiBut *but, char *str, const size_t maxlen) ATTR_NONNULL(); +extern void ui_but_string_get(uiBut *but, char *str, size_t maxlen) ATTR_NONNULL(); /** * A version of #ui_but_string_get_ex for dynamic buffer sizes * (where #ui_but_string_get_max_length returns 0). diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index bc1d3387ad7..135cef5fe53 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -1146,6 +1146,7 @@ static void panel_draw_aligned_widgets(const uiStyle *style, UI_fontstyle_draw(fontstyle, &title_rect, panel->drawname, + sizeof(panel->drawname), title_color, &(struct uiFontStyleDraw_Params){ .align = UI_STYLE_TEXT_LEFT, diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c index e146443faaa..fe58a6a05ae 100644 --- a/source/blender/editors/interface/interface_region_tooltip.c +++ b/source/blender/editors/interface/interface_region_tooltip.c @@ -74,6 +74,8 @@ #define UI_TIP_PADDING (int)(UI_TIP_PAD_FAC * UI_UNIT_Y) #define UI_TIP_MAXWIDTH 600 +#define UI_TIP_STR_MAX 1024 + typedef struct uiTooltipFormat { enum { UI_TIP_STYLE_NORMAL = 0, @@ -214,7 +216,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region /* draw header and active data (is done here to be able to change color) */ rgb_float_to_uchar(drawcol, tip_colors[UI_TIP_LC_MAIN]); UI_fontstyle_set(&data->fstyle); - UI_fontstyle_draw(&data->fstyle, &bbox, field->text, drawcol, &fs_params); + UI_fontstyle_draw(&data->fstyle, &bbox, field->text, UI_TIP_STR_MAX, drawcol, &fs_params); /* offset to the end of the last line */ if (field->text_suffix) { @@ -224,7 +226,8 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region bbox.ymax -= yofs; rgb_float_to_uchar(drawcol, tip_colors[UI_TIP_LC_ACTIVE]); - UI_fontstyle_draw(&data->fstyle, &bbox, field->text_suffix, drawcol, &fs_params); + UI_fontstyle_draw( + &data->fstyle, &bbox, field->text_suffix, UI_TIP_STR_MAX, drawcol, &fs_params); /* undo offset */ bbox.xmin -= xofs; @@ -243,7 +246,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region /* XXX, needed because we don't have mono in 'U.uifonts' */ BLF_size(fstyle_mono.uifont_id, fstyle_mono.points * U.pixelsize, U.dpi); rgb_float_to_uchar(drawcol, tip_colors[field->format.color_id]); - UI_fontstyle_draw(&fstyle_mono, &bbox, field->text, drawcol, &fs_params); + UI_fontstyle_draw(&fstyle_mono, &bbox, field->text, UI_TIP_STR_MAX, drawcol, &fs_params); } else { BLI_assert(field->format.style == UI_TIP_STYLE_NORMAL); @@ -255,7 +258,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region /* draw remaining data */ rgb_float_to_uchar(drawcol, tip_colors[field->format.color_id]); UI_fontstyle_set(&data->fstyle); - UI_fontstyle_draw(&data->fstyle, &bbox, field->text, drawcol, &fs_params); + UI_fontstyle_draw(&data->fstyle, &bbox, field->text, UI_TIP_STR_MAX, drawcol, &fs_params); } bbox.ymax -= data->lineh * field->geom.lines; @@ -1215,12 +1218,12 @@ static ARegion *ui_tooltip_create_with_data(bContext *C, BLI_assert(ELEM(field->format.style, UI_TIP_STYLE_NORMAL, UI_TIP_STYLE_HEADER)); font_id = data->fstyle.uifont_id; } - w = BLF_width_ex(font_id, field->text, BLF_DRAW_STR_DUMMY_MAX, &info); + w = BLF_width_ex(font_id, field->text, UI_TIP_STR_MAX, &info); /* check for suffix (enum label) */ if (field->text_suffix && field->text_suffix[0]) { x_pos = info.width; - w = max_ii(w, x_pos + BLF_width(font_id, field->text_suffix, BLF_DRAW_STR_DUMMY_MAX)); + w = max_ii(w, x_pos + BLF_width(font_id, field->text_suffix, UI_TIP_STR_MAX)); } fontw = max_ii(fontw, w); diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index c28769a4951..44942d508ca 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -140,9 +140,9 @@ static uiFont *uifont_to_blfont(int id) void UI_fontstyle_draw_ex(const uiFontStyle *fs, const rcti *rect, const char *str, + const size_t str_len, const uchar col[4], const struct uiFontStyleDraw_Params *fs_params, - size_t len, int *r_xofs, int *r_yofs, struct ResultBLF *r_info) @@ -183,10 +183,10 @@ void UI_fontstyle_draw_ex(const uiFontStyle *fs, } if (fs_params->align == UI_STYLE_TEXT_CENTER) { - xofs = floor(0.5f * (BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, len))); + xofs = floor(0.5f * (BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, str_len))); } else if (fs_params->align == UI_STYLE_TEXT_RIGHT) { - xofs = BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, len); + xofs = BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, str_len); } yofs = MAX2(0, yofs); @@ -196,7 +196,7 @@ void UI_fontstyle_draw_ex(const uiFontStyle *fs, BLF_position(fs->uifont_id, rect->xmin + xofs, rect->ymin + yofs, 0.0f); BLF_color4ubv(fs->uifont_id, col); - BLF_draw_ex(fs->uifont_id, str, len, r_info); + BLF_draw_ex(fs->uifont_id, str, str_len, r_info); BLF_disable(fs->uifont_id, font_flag); @@ -211,12 +211,11 @@ void UI_fontstyle_draw_ex(const uiFontStyle *fs, void UI_fontstyle_draw(const uiFontStyle *fs, const rcti *rect, const char *str, + const size_t str_len, const uchar col[4], const struct uiFontStyleDraw_Params *fs_params) { - int xofs, yofs; - - UI_fontstyle_draw_ex(fs, rect, str, col, fs_params, BLF_DRAW_STR_DUMMY_MAX, &xofs, &yofs, NULL); + UI_fontstyle_draw_ex(fs, rect, str, str_len, col, fs_params, NULL, NULL, NULL); } void UI_fontstyle_draw_rotated(const uiFontStyle *fs, diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index ad8c0842657..b44496731f7 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2130,11 +2130,11 @@ static void widget_draw_text(const uiFontStyle *fstyle, UI_fontstyle_draw_ex(fstyle, rect, drawstr + but->ofs, + drawlen, wcol->text, &(struct uiFontStyleDraw_Params){ .align = align, }, - drawlen, &font_xofs, &font_yofs, NULL); @@ -2194,6 +2194,7 @@ static void widget_draw_text(const uiFontStyle *fstyle, UI_fontstyle_draw(fstyle, rect, drawstr_right, + UI_MAX_DRAW_STR, col, &(struct uiFontStyleDraw_Params){ .align = UI_STYLE_TEXT_RIGHT, @@ -5417,11 +5418,11 @@ void ui_draw_menu_item(const uiFontStyle *fstyle, UI_fontstyle_draw_ex(fstyle, rect, drawstr, + sizeof(drawstr), wt->wcol.text, &(struct uiFontStyleDraw_Params){ .align = UI_STYLE_TEXT_LEFT, }, - BLF_DRAW_STR_DUMMY_MAX, &xofs, &yofs, &info); @@ -5468,6 +5469,7 @@ void ui_draw_menu_item(const uiFontStyle *fstyle, UI_fontstyle_draw(fstyle, rect, hint_drawstr, + sizeof(hint_drawstr), wt->wcol.text, &(struct uiFontStyleDraw_Params){ .align = UI_STYLE_TEXT_RIGHT, @@ -5523,6 +5525,7 @@ void ui_draw_preview_item_stateless(const uiFontStyle *fstyle, UI_fontstyle_draw(fstyle, &trect, drawstr, + sizeof(drawstr), text_col, &(struct uiFontStyleDraw_Params){ .align = text_align, diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index b9943d13b19..06e21f91d04 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -3527,6 +3527,8 @@ static int object_add_named_exec(bContext *C, wmOperator *op) } basen->object->visibility_flag &= ~OB_HIDE_VIEWPORT; + /* Do immediately, as #copy_object_set_idnew() below operates on visible objects. */ + BKE_base_eval_flags(basen); /* object_add_duplicate_internal() doesn't deselect other objects, unlike object_add_common() or * BKE_view_layer_base_deselect_all(). */ diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index b9c92c1664d..757b1a4c0c4 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2083,15 +2083,31 @@ typedef struct sAreaSplitData { } sAreaSplitData; +static bool area_split_allowed(const ScrArea *area, const eScreenAxis dir_axis) +{ + if (!area || area->global) { + /* Must be a non-global area. */ + return false; + } + + if ((dir_axis == SCREEN_AXIS_V && area->winx <= 2 * AREAMINX) || + (dir_axis == SCREEN_AXIS_H && area->winy <= 2 * ED_area_headersize())) { + /* Must be at least double minimum sizes to split into two. */ + return false; + } + + return true; +} + static void area_split_draw_cb(const struct wmWindow *UNUSED(win), void *userdata) { const wmOperator *op = userdata; sAreaSplitData *sd = op->customdata; - if (sd->sarea) { - const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction"); - float fac = RNA_float_get(op->ptr, "factor"); + const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction"); + if (area_split_allowed(sd->sarea, dir_axis)) { + float fac = RNA_float_get(op->ptr, "factor"); screen_draw_split_preview(sd->sarea, dir_axis, fac); } } @@ -2121,18 +2137,6 @@ static bool area_split_init(bContext *C, wmOperator *op) /* required properties */ const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction"); - /* minimal size */ - if (dir_axis == SCREEN_AXIS_V) { - if (area->winx < 2 * AREAMINX) { - return false; - } - } - else { - if (area->winy < 2 * ED_area_headersize()) { - return false; - } - } - /* custom data */ sAreaSplitData *sd = (sAreaSplitData *)MEM_callocN(sizeof(sAreaSplitData), "op_area_split"); op->customdata = sd; @@ -2189,6 +2193,10 @@ static bool area_split_apply(bContext *C, wmOperator *op) float fac = RNA_float_get(op->ptr, "factor"); const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction"); + if (!area_split_allowed(sd->sarea, dir_axis)) { + return false; + } + sd->narea = area_split(win, screen, sd->sarea, dir_axis, fac, false); /* false = no merge */ if (sd->narea == NULL) { @@ -2254,9 +2262,15 @@ static void area_split_exit(bContext *C, wmOperator *op) static void area_split_preview_update_cursor(bContext *C, wmOperator *op) { - wmWindow *win = CTX_wm_window(C); + sAreaSplitData *sd = (sAreaSplitData *)op->customdata; const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction"); - WM_cursor_set(win, (dir_axis == SCREEN_AXIS_H) ? WM_CURSOR_H_SPLIT : WM_CURSOR_V_SPLIT); + if (area_split_allowed(sd->sarea, dir_axis)) { + WM_cursor_set(CTX_wm_window(C), + (dir_axis == SCREEN_AXIS_H) ? WM_CURSOR_H_SPLIT : WM_CURSOR_V_SPLIT); + } + else { + WM_cursor_set(CTX_wm_window(C), WM_CURSOR_STOP); + } } /* UI callback, adds new handler */ @@ -2509,6 +2523,9 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event) if (sd->sarea) { ED_area_tag_redraw(sd->sarea); } + + area_split_preview_update_cursor(C, op); + /* area context not set */ sd->sarea = BKE_screen_find_area_xy(CTX_wm_screen(C), SPACE_TYPE_ANY, event->xy); diff --git a/source/blender/editors/space_clip/CMakeLists.txt b/source/blender/editors/space_clip/CMakeLists.txt index 8c7f59d61dd..06179ffdd95 100644 --- a/source/blender/editors/space_clip/CMakeLists.txt +++ b/source/blender/editors/space_clip/CMakeLists.txt @@ -31,6 +31,9 @@ set(INC ../../windowmanager ../../../../intern/glew-mx ../../../../intern/guardedalloc + + # dna_type_offsets.h + ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern ) set(SRC diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c index 09daed7e2e7..d22e4864ecf 100644 --- a/source/blender/editors/space_clip/clip_editor.c +++ b/source/blender/editors/space_clip/clip_editor.c @@ -34,6 +34,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_defaults.h" #include "DNA_mask_types.h" #include "BLI_fileops.h" @@ -686,7 +687,7 @@ static bool check_prefetch_break(void) static uchar *prefetch_read_file_to_memory( MovieClip *clip, int current_frame, short render_size, short render_flag, size_t *r_size) { - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); user.framenr = current_frame; user.render_size = render_size; user.render_flag = render_flag; @@ -733,7 +734,7 @@ static int prefetch_find_uncached_frame(MovieClip *clip, short direction) { int current_frame; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); user.render_size = render_size; user.render_flag = render_flag; @@ -833,7 +834,7 @@ static void prefetch_task_func(TaskPool *__restrict pool, void *task_data) while ((mem = prefetch_thread_next_frame(queue, clip, &size, ¤t_frame))) { ImBuf *ibuf; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); int flag = IB_rect | IB_multilayer | IB_alphamode_detect | IB_metadata; int result; char *colorspace_name = NULL; @@ -915,7 +916,7 @@ static bool prefetch_movie_frame(MovieClip *clip, short render_flag, short *stop) { - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); if (check_prefetch_break() || *stop) { return false; diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index 0aa7e35aed6..ef522e57d02 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -33,6 +33,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_defaults.h" #include "DNA_scene_types.h" /* min/max frames */ #include "DNA_userdef_types.h" @@ -1321,7 +1322,7 @@ static uchar *proxy_thread_next_frame(ProxyQueue *queue, BLI_spin_lock(&queue->spin); if (!*queue->stop && queue->cfra <= queue->efra) { - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); char name[FILE_MAX]; size_t size; int file; diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 847cba32c69..b6dbda79a2d 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -24,6 +24,8 @@ #include <stdio.h> #include <string.h> +#include "DNA_defaults.h" + #include "DNA_mask_types.h" #include "DNA_movieclip_types.h" #include "DNA_scene_types.h" @@ -239,14 +241,7 @@ static SpaceLink *clip_create(const ScrArea *area, const Scene *scene) ARegion *region; SpaceClip *sc; - sc = MEM_callocN(sizeof(SpaceClip), "initclip"); - sc->spacetype = SPACE_CLIP; - sc->flag = SC_SHOW_MARKER_PATTERN | SC_SHOW_TRACK_PATH | SC_SHOW_GRAPH_TRACKS_MOTION | - SC_SHOW_GRAPH_FRAMES | SC_SHOW_ANNOTATION; - sc->zoom = 1.0f; - sc->path_length = 20; - sc->scopes.track_preview_height = 120; - sc->around = V3D_AROUND_CENTER_MEDIAN; + sc = DNA_struct_default_alloc(SpaceClip); /* header */ region = MEM_callocN(sizeof(ARegion), "header for clip"); diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 44e9735866d..dd1b4e10e60 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -240,6 +240,7 @@ static void file_draw_string(int sx, UI_fontstyle_draw(&fs, &rect, fname, + sizeof(fname), col, &(struct uiFontStyleDraw_Params){ .align = align, @@ -289,12 +290,12 @@ static void file_draw_string_multiline(int sx, UI_fontstyle_draw_ex(&style->widget, &rect, string, + len, text_col, &(struct uiFontStyleDraw_Params){ .align = UI_STYLE_TEXT_LEFT, .word_wrap = true, }, - len, NULL, NULL, &result); diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index 2d3c42b16d1..e9a385c525b 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -2452,7 +2452,7 @@ static void frame_node_draw_label(const bNodeTree &ntree, const bool has_label = node.label[0] != '\0'; if (has_label) { BLF_position(fontid, x, y, 0); - BLF_draw(fontid, label, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(fontid, label, sizeof(label)); } /* draw text body */ diff --git a/source/blender/editors/space_node/node_group.cc b/source/blender/editors/space_node/node_group.cc index 4834ca3174a..02d68189997 100644 --- a/source/blender/editors/space_node/node_group.cc +++ b/source/blender/editors/space_node/node_group.cc @@ -28,9 +28,9 @@ #include "DNA_anim_types.h" #include "DNA_node_types.h" -#include "BLI_float2.hh" #include "BLI_linklist.h" #include "BLI_listbase.h" +#include "BLI_math_vec_types.hh" #include "BLI_string.h" #include "BLI_vector.hh" diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh index 0f542734f66..740d1fbb6f9 100644 --- a/source/blender/editors/space_node/node_intern.hh +++ b/source/blender/editors/space_node/node_intern.hh @@ -23,7 +23,7 @@ #pragma once -#include "BLI_float2.hh" +#include "BLI_math_vec_types.hh" #include "BLI_vector.hh" #include "BKE_node.h" @@ -43,9 +43,6 @@ struct bNodeLink; struct bNodeSocket; struct wmGizmoGroupType; struct wmKeyConfig; -namespace blender { -struct float2; -} struct wmWindow; /** Temporary data used in node link drag modal operator. */ diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index 334ca1f76ee..803cf38c53a 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -111,11 +111,13 @@ static bNode *node_under_mouse_select(bNodeTree &ntree, int mx, int my) static bNode *node_under_mouse_tweak(bNodeTree &ntree, const float2 &mouse) { + using namespace blender::math; + LISTBASE_FOREACH_BACKWARD (bNode *, node, &ntree.nodes) { if (node->type == NODE_REROUTE) { bNodeSocket *socket = (bNodeSocket *)node->inputs.first; const float2 location{socket->locx, socket->locy}; - if (float2::distance(mouse, location) < 24.0f) { + if (distance(mouse, location) < 24.0f) { return node; } } diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index a586f268128..8bcd50161bd 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -79,6 +79,7 @@ #include "RNA_access.h" #include "outliner_intern.h" +#include "tree/tree_display.h" /* Disable - this is far too slow - campbell. */ /* #define USE_GROUP_SELECT */ @@ -2143,6 +2144,80 @@ static void outliner_draw_mode_column(const bContext *C, } } +/* Returns `true` if some warning was drawn for that element or one of its sub-elements (if it is + * not open). */ +static bool outliner_draw_warning_tree_element(uiBlock *block, + SpaceOutliner *space_outliner, + TreeElement *te, + TreeStoreElem *tselem, + const bool use_mode_column, + const int te_ys) +{ + if ((te->flag & TE_HAS_WARNING) == 0) { + /* If given element has no warning, recusively try to display the first sub-elements' warning. + */ + if (!TSELEM_OPEN(tselem, space_outliner)) { + LISTBASE_FOREACH (TreeElement *, sub_te, &te->subtree) { + TreeStoreElem *sub_tselem = TREESTORE(sub_te); + + if (outliner_draw_warning_tree_element( + block, space_outliner, sub_te, sub_tselem, use_mode_column, te_ys)) { + return true; + } + } + } + return false; + } + + int icon = ICON_NONE; + const char *tip = ""; + const bool has_warning = outliner_element_warnings_get(te, &icon, &tip); + BLI_assert(has_warning); + UNUSED_VARS_NDEBUG(has_warning); + + /* Move the warnings a unit left in view layer mode. */ + const short mode_column_offset = (use_mode_column && (space_outliner->outlinevis == SO_SCENES)) ? + UI_UNIT_X : + 0; + + UI_block_emboss_set(block, UI_EMBOSS_NONE_OR_STATUS); + uiBut *but = uiDefIconBut(block, + UI_BTYPE_ICON_TOGGLE, + 0, + icon, + mode_column_offset, + te_ys, + UI_UNIT_X, + UI_UNIT_Y, + NULL, + 0.0, + 0.0, + 0.0, + 0.0, + tip); + /* No need for undo here, this is a pure info widget. */ + UI_but_flag_disable(but, UI_BUT_UNDO); + + return true; +} + +static void outliner_draw_warning_column(const bContext *C, + uiBlock *block, + SpaceOutliner *space_outliner, + const bool use_mode_column, + ListBase *tree) +{ + LISTBASE_FOREACH (TreeElement *, te, tree) { + TreeStoreElem *tselem = TREESTORE(te); + + outliner_draw_warning_tree_element(block, space_outliner, te, tselem, use_mode_column, te->ys); + + if (TSELEM_OPEN(tselem, space_outliner)) { + outliner_draw_warning_column(C, block, space_outliner, use_mode_column, &te->subtree); + } + } +} + /* ****************************************************** */ /* Normal Drawing... */ @@ -3612,17 +3687,22 @@ static void outliner_draw_tree(bContext *C, SpaceOutliner *space_outliner, const float restrict_column_width, const bool use_mode_column, + const bool use_warning_column, TreeElement **te_edit) { const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; int starty, startx; /* Move the tree a unit left in view layer mode */ - short mode_column_offset = (use_mode_column && (space_outliner->outlinevis == SO_SCENES)) ? - UI_UNIT_X : - 0; + short columns_offset = (use_mode_column && (space_outliner->outlinevis == SO_SCENES)) ? + UI_UNIT_X : + 0; if (!use_mode_column && (space_outliner->outlinevis == SO_VIEW_LAYER)) { - mode_column_offset -= UI_UNIT_X; + columns_offset -= UI_UNIT_X; + } + + if (use_warning_column) { + columns_offset += UI_UNIT_X; } GPU_blend(GPU_BLEND_ALPHA); /* Only once. */ @@ -3650,12 +3730,12 @@ static void outliner_draw_tree(bContext *C, /* Draw hierarchy lines for collections and object children. */ starty = (int)region->v2d.tot.ymax - OL_Y_OFFSET; - startx = mode_column_offset + UI_UNIT_X / 2 - (U.pixelsize + 1) / 2; + startx = columns_offset + UI_UNIT_X / 2 - (U.pixelsize + 1) / 2; outliner_draw_hierarchy_lines(space_outliner, &space_outliner->tree, startx, &starty); /* Items themselves. */ starty = (int)region->v2d.tot.ymax - UI_UNIT_Y - OL_Y_OFFSET; - startx = mode_column_offset; + startx = columns_offset; LISTBASE_FOREACH (TreeElement *, te, &space_outliner->tree) { outliner_draw_tree_element(C, block, @@ -3786,6 +3866,10 @@ void draw_outliner(const bContext *C) const bool use_mode_column = (space_outliner->flag & SO_MODE_COLUMN) && (ELEM(space_outliner->outlinevis, SO_VIEW_LAYER, SO_SCENES)); + const bool use_warning_column = + ELEM(space_outliner->outlinevis, SO_LIBRARIES, SO_OVERRIDES_LIBRARY) && + outliner_tree_display_warnings_poll(space_outliner->runtime->tree_display); + /* Draw outliner stuff (background, hierarchy lines and names). */ const float restrict_column_width = outliner_restrict_columns_width(space_outliner); outliner_back(region); @@ -3797,6 +3881,7 @@ void draw_outliner(const bContext *C) space_outliner, restrict_column_width, use_mode_column, + use_warning_column, &te_edit); /* Compute outliner dimensions after it has been drawn. */ @@ -3841,6 +3926,11 @@ void draw_outliner(const bContext *C) outliner_draw_mode_column(C, block, &tvc, space_outliner, &space_outliner->tree); } + /* Draw warning icons */ + if (use_warning_column) { + outliner_draw_warning_column(C, block, space_outliner, use_mode_column, &space_outliner->tree); + } + UI_block_emboss_set(block, UI_EMBOSS); /* Draw edit buttons if necessary. */ diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index e331887319e..24e86e06f68 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -158,6 +158,8 @@ enum { /* Child elements of the same type in the icon-row are drawn merged as one icon. * This flag is set for an element that is part of these merged child icons. */ TE_ICONROW_MERGED = (1 << 7), + /* This element has some warning to be displayed. */ + TE_HAS_WARNING = (1 << 8), }; /* button events */ diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 3353726de18..e461eb4c69e 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -74,6 +74,7 @@ #include "RNA_access.h" #include "UI_interface.h" +#include "UI_resources.h" #include "outliner_intern.h" #include "tree/tree_display.h" @@ -812,6 +813,41 @@ static void outliner_add_id_contents(SpaceOutliner *space_outliner, } } +bool outliner_element_warnings_get(TreeElement *te, int *r_icon, const char **r_message) +{ + TreeStoreElem *tselem = TREESTORE(te); + + if (tselem->type != TSE_SOME_ID) { + return false; + } + if (te->idcode != ID_LI) { + return false; + } + + Library *library = (Library *)tselem->id; + if (library->tag & LIBRARY_TAG_RESYNC_REQUIRED) { + if (r_icon) { + *r_icon = ICON_ERROR; + } + if (r_message) { + *r_message = TIP_( + "Contains linked library overrides that need to be resynced, updating the library is " + "recommended"); + } + return true; + } + if (library->id.tag & LIB_TAG_MISSING) { + if (r_icon) { + *r_icon = ICON_ERROR; + } + if (r_message) { + *r_message = TIP_("Missing library"); + } + return true; + } + return false; +} + TreeElement *outliner_add_element(SpaceOutliner *space_outliner, ListBase *lb, void *idv, @@ -1115,6 +1151,10 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, } } + if (outliner_element_warnings_get(te, NULL, NULL)) { + te->flag |= TE_HAS_WARNING; + } + return te; } diff --git a/source/blender/editors/space_outliner/tree/tree_display.cc b/source/blender/editors/space_outliner/tree/tree_display.cc index 003afd5bdec..e192929c7cf 100644 --- a/source/blender/editors/space_outliner/tree/tree_display.cc +++ b/source/blender/editors/space_outliner/tree/tree_display.cc @@ -66,3 +66,10 @@ ListBase outliner_tree_display_build_tree(TreeDisplay *tree_display, TreeSourceD { return reinterpret_cast<AbstractTreeDisplay *>(tree_display)->buildTree(*source_data); } + +bool outliner_tree_display_warnings_poll(const TreeDisplay *tree_display) +{ + const AbstractTreeDisplay *abstract_tree_display = reinterpret_cast<const AbstractTreeDisplay *>( + tree_display); + return abstract_tree_display->has_warnings; +} diff --git a/source/blender/editors/space_outliner/tree/tree_display.h b/source/blender/editors/space_outliner/tree/tree_display.h index b6dc33ba7b7..7b959576a4b 100644 --- a/source/blender/editors/space_outliner/tree/tree_display.h +++ b/source/blender/editors/space_outliner/tree/tree_display.h @@ -47,6 +47,16 @@ void outliner_tree_display_destroy(TreeDisplay **tree_display); ListBase outliner_tree_display_build_tree(TreeDisplay *tree_display, TreeSourceData *source_data); +/** Accessor to whether given tree has some warnings to display. */ +bool outliner_tree_display_warnings_poll(const struct TreeDisplay *tree_display); + +/** Get actual warning data of a tree element, if any. + * + * \param r_icon The icon to display as warning. + * \param r_message The message to display as warning. + * \return true if there is a warning, false otherwise. */ +bool outliner_element_warnings_get(struct TreeElement *te, int *r_icon, const char **r_message); + /* The following functions are needed to build the tree. They are calls back into C; the way * elements are created should be refactored and ported to C++ with a new design/API too. */ /** diff --git a/source/blender/editors/space_outliner/tree/tree_display.hh b/source/blender/editors/space_outliner/tree/tree_display.hh index 54e64655b18..bf9cf18948c 100644 --- a/source/blender/editors/space_outliner/tree/tree_display.hh +++ b/source/blender/editors/space_outliner/tree/tree_display.hh @@ -65,6 +65,8 @@ class AbstractTreeDisplay { */ virtual ListBase buildTree(const TreeSourceData &source_data) = 0; + bool has_warnings = false; + protected: /** All derived classes will need a handle to this, so storing it in the base for convenience. */ SpaceOutliner &space_outliner_; @@ -105,7 +107,7 @@ class TreeDisplayLibraries final : public AbstractTreeDisplay { ListBase buildTree(const TreeSourceData &source_data) override; private: - TreeElement *add_library_contents(Main &, ListBase &, Library *) const; + TreeElement *add_library_contents(Main &, ListBase &, Library *); bool library_id_filter_poll(const Library *lib, ID *id) const; short id_filter_get() const; }; @@ -123,7 +125,7 @@ class TreeDisplayOverrideLibrary final : public AbstractTreeDisplay { ListBase buildTree(const TreeSourceData &source_data) override; private: - TreeElement *add_library_contents(Main &, ListBase &, Library *) const; + TreeElement *add_library_contents(Main &, ListBase &, Library *); bool override_library_id_filter_poll(const Library *lib, ID *id) const; short id_filter_get() const; }; diff --git a/source/blender/editors/space_outliner/tree/tree_display_libraries.cc b/source/blender/editors/space_outliner/tree/tree_display_libraries.cc index 836f0937cf4..461104e6bad 100644 --- a/source/blender/editors/space_outliner/tree/tree_display_libraries.cc +++ b/source/blender/editors/space_outliner/tree/tree_display_libraries.cc @@ -104,9 +104,7 @@ ListBase TreeDisplayLibraries::buildTree(const TreeSourceData &source_data) return tree; } -TreeElement *TreeDisplayLibraries::add_library_contents(Main &mainvar, - ListBase &lb, - Library *lib) const +TreeElement *TreeDisplayLibraries::add_library_contents(Main &mainvar, ListBase &lb, Library *lib) { const short filter_id_type = id_filter_get(); @@ -149,6 +147,9 @@ TreeElement *TreeDisplayLibraries::add_library_contents(Main &mainvar, tenlib = outliner_add_element(&space_outliner_, &lb, &mainvar, nullptr, TSE_ID_BASE, 0); tenlib->name = IFACE_("Current File"); } + if (tenlib->flag & TE_HAS_WARNING) { + has_warnings = true; + } } /* Create data-block list parent element on demand. */ diff --git a/source/blender/editors/space_outliner/tree/tree_display_override_library.cc b/source/blender/editors/space_outliner/tree/tree_display_override_library.cc index 943e182277c..bf9fba30c9f 100644 --- a/source/blender/editors/space_outliner/tree/tree_display_override_library.cc +++ b/source/blender/editors/space_outliner/tree/tree_display_override_library.cc @@ -112,7 +112,7 @@ ListBase TreeDisplayOverrideLibrary::buildTree(const TreeSourceData &source_data TreeElement *TreeDisplayOverrideLibrary::add_library_contents(Main &mainvar, ListBase &lb, - Library *lib) const + Library *lib) { const short filter_id_type = id_filter_get(); @@ -152,6 +152,9 @@ TreeElement *TreeDisplayOverrideLibrary::add_library_contents(Main &mainvar, tenlib = outliner_add_element(&space_outliner_, &lb, &mainvar, nullptr, TSE_ID_BASE, 0); tenlib->name = IFACE_("Current File"); } + if (tenlib->flag & TE_HAS_WARNING) { + has_warnings = true; + } } /* Create data-block list parent element on demand. */ diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index e814530d1e2..6dffc0bc2a4 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -2262,28 +2262,15 @@ void sequencer_draw_preview(const bContext *C, seq_prefetch_wm_notify(C, scene); } -/* Draw backdrop in sequencer timeline. */ -static void draw_seq_backdrop(View2D *v2d) +static void draw_seq_timeline_channels(View2D *v2d) { - int i; - uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - - /* View backdrop. */ - immUniformThemeColor(TH_BACK); - immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); - - /* Darker overlay over the view backdrop. */ - immUniformThemeColorShade(TH_BACK, -10); - immRectf(pos, v2d->cur.xmin, -1.0, v2d->cur.xmax, 1.0); - - /* Alternating horizontal stripes. */ - i = max_ii(1, ((int)v2d->cur.ymin) - 1); - GPU_blend(GPU_BLEND_ALPHA); immUniformThemeColor(TH_ROW_ALTERNATE); + /* Alternating horizontal stripes. */ + int i = max_ii(1, ((int)v2d->cur.ymin) - 1); while (i < v2d->cur.ymax) { if (i & 1) { immRectf(pos, v2d->cur.xmin, i, v2d->cur.xmax, i + 1); @@ -2295,6 +2282,14 @@ static void draw_seq_backdrop(View2D *v2d) immUnbindProgram(); } +static void draw_seq_timeline_channel_numbers(ARegion *region) +{ + View2D *v2d = ®ion->v2d; + rcti rect; + BLI_rcti_init(&rect, 0, 15 * UI_DPI_FAC, 15 * UI_DPI_FAC, region->winy - UI_TIME_SCRUB_MARGIN_Y); + UI_view2d_draw_scale_y__block(region, v2d, &rect, TH_SCROLL_TEXT); +} + static void draw_seq_strips(const bContext *C, Editing *ed, ARegion *region) { Scene *scene = CTX_data_scene(C); @@ -2718,7 +2713,7 @@ void draw_timeline_seq(const bContext *C, ARegion *region) } UI_view2d_view_ortho(v2d); - draw_seq_backdrop(v2d); + draw_seq_timeline_channels(v2d); if ((sseq->flag & SEQ_SHOW_OVERLAY) && (sseq->timeline_overlay.flag & SEQ_TIMELINE_SHOW_GRID)) { U.v2d_min_gridsize *= 3; UI_view2d_draw_lines_x__discrete_frames_or_seconds( @@ -2776,13 +2771,7 @@ void draw_timeline_seq(const bContext *C, ARegion *region) UI_view2d_view_restore(C); ED_time_scrub_draw(region, scene, !(sseq->flag & SEQ_DRAWFRAMES), true); - /* Draw channel numbers. */ - { - rcti rect; - BLI_rcti_init( - &rect, 0, 15 * UI_DPI_FAC, 15 * UI_DPI_FAC, region->winy - UI_TIME_SCRUB_MARGIN_Y); - UI_view2d_draw_scale_y__block(region, v2d, &rect, TH_SCROLL_TEXT); - } + draw_seq_timeline_channel_numbers(region); } void draw_timeline_seq_display(const bContext *C, ARegion *region) diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_column.cc b/source/blender/editors/space_spreadsheet/spreadsheet_column.cc index ee623083db7..ede8756a9da 100644 --- a/source/blender/editors/space_spreadsheet/spreadsheet_column.cc +++ b/source/blender/editors/space_spreadsheet/spreadsheet_column.cc @@ -19,9 +19,8 @@ #include "MEM_guardedalloc.h" #include "BLI_color.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_hash.hh" +#include "BLI_math_vec_types.hh" #include "BLI_string.h" #include "BLI_string_ref.hh" diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc index 7cc2d8d0b48..f4b5ff819ed 100644 --- a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc +++ b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc @@ -17,8 +17,7 @@ #include <iomanip> #include <sstream> -#include "BLI_float2.hh" -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BKE_geometry_set.hh" diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc index 36c7f1057df..556c0b0d5ca 100644 --- a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc +++ b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc @@ -123,9 +123,7 @@ static void apply_row_filter(const SpreadsheetRowFilter &row_filter, const float threshold_sq = row_filter.threshold; apply_filter_operation( column_data.typed<float2>(), - [&](const float2 cell) { - return float2::distance_squared(cell, value) > threshold_sq; - }, + [&](const float2 cell) { return math::distance_squared(cell, value) > threshold_sq; }, prev_mask, new_indices); break; @@ -155,9 +153,7 @@ static void apply_row_filter(const SpreadsheetRowFilter &row_filter, const float threshold_sq = row_filter.threshold; apply_filter_operation( column_data.typed<float3>(), - [&](const float3 cell) { - return float3::distance_squared(cell, value) > threshold_sq; - }, + [&](const float3 cell) { return math::distance_squared(cell, value) > threshold_sq; }, prev_mask, new_indices); break; diff --git a/source/blender/editors/util/ed_draw.c b/source/blender/editors/util/ed_draw.c index ccbde07f5b1..3e85862a847 100644 --- a/source/blender/editors/util/ed_draw.c +++ b/source/blender/editors/util/ed_draw.c @@ -599,9 +599,9 @@ static void metadata_custom_draw_fields(const char *field, const char *value, vo } MetadataCustomDrawContext *ctx = (MetadataCustomDrawContext *)ctx_v; char temp_str[MAX_METADATA_STR]; - BLI_snprintf(temp_str, MAX_METADATA_STR, "%s: %s", field, value); + SNPRINTF(temp_str, "%s: %s", field, value); BLF_position(ctx->fontid, ctx->xmin, ctx->ymin + ctx->current_y, 0.0f); - BLF_draw(ctx->fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(ctx->fontid, temp_str, sizeof(temp_str)); ctx->current_y += ctx->vertical_offset; } @@ -625,18 +625,18 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const /* first line */ if (i == 0) { bool do_newline = false; - int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[0]); + int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[0]); if (metadata_is_valid(ibuf, temp_str, 0, len)) { BLF_position(fontid, xmin, ymax - vertical_offset, 0.0f); - BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(fontid, temp_str, sizeof(temp_str)); do_newline = true; } - len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[1]); + len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[1]); if (metadata_is_valid(ibuf, temp_str, 1, len)) { - int line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + int line_width = BLF_width(fontid, temp_str, sizeof(temp_str)); BLF_position(fontid, xmax - line_width, ymax - vertical_offset, 0.0f); - BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(fontid, temp_str, sizeof(temp_str)); do_newline = true; } @@ -645,32 +645,32 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const } } /* Strip */ else if (ELEM(i, 1, 2)) { - int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]); + int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i + 1]); if (metadata_is_valid(ibuf, temp_str, i + 1, len)) { BLF_position(fontid, xmin, ymax - vertical_offset - ofs_y, 0.0f); - BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(fontid, temp_str, sizeof(temp_str)); ofs_y += vertical_offset; } } /* Note (wrapped) */ else if (i == 3) { - int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]); + int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i + 1]); if (metadata_is_valid(ibuf, temp_str, i + 1, len)) { struct ResultBLF info; BLF_enable(fontid, BLF_WORD_WRAP); BLF_wordwrap(fontid, ibuf->x - (margin * 2)); BLF_position(fontid, xmin, ymax - vertical_offset - ofs_y, 0.0f); - BLF_draw_ex(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX, &info); + BLF_draw_ex(fontid, temp_str, sizeof(temp_str), &info); BLF_wordwrap(fontid, 0); BLF_disable(fontid, BLF_WORD_WRAP); ofs_y += vertical_offset * info.lines; } } else { - int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]); + int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i + 1]); if (metadata_is_valid(ibuf, temp_str, i + 1, len)) { - int line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + int line_width = BLF_width(fontid, temp_str, sizeof(temp_str)); BLF_position(fontid, xmax - line_width, ymax - vertical_offset - ofs_y, 0.0f); - BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(fontid, temp_str, sizeof(temp_str)); ofs_y += vertical_offset; } } @@ -687,12 +687,12 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const int ofs_x = 0; ofs_y = ctx.current_y; for (int i = 5; i < 10; i++) { - int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i]); + int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i]); if (metadata_is_valid(ibuf, temp_str, i, len)) { BLF_position(fontid, xmin + ofs_x, ymin + ofs_y, 0.0f); - BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw(fontid, temp_str, sizeof(temp_str)); - ofs_x += BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX) + UI_UNIT_X; + ofs_x += BLF_width(fontid, temp_str, sizeof(temp_str)) + UI_UNIT_X; } } } diff --git a/source/blender/freestyle/CMakeLists.txt b/source/blender/freestyle/CMakeLists.txt index b7eaf018dba..47da6bc55f6 100644 --- a/source/blender/freestyle/CMakeLists.txt +++ b/source/blender/freestyle/CMakeLists.txt @@ -594,4 +594,7 @@ if(WIN32) endif() blender_add_lib(bf_freestyle "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") -blender_precompile_headers(bf_freestyle FRS_precomp.cpp FRS_precomp.h) + +if(COMMAND target_precompile_headers) + target_precompile_headers(bf_freestyle PRIVATE FRS_precomp.h) +endif() diff --git a/source/blender/freestyle/FRS_precomp.cpp b/source/blender/freestyle/FRS_precomp.cpp deleted file mode 100644 index 7e50a47f45b..00000000000 --- a/source/blender/freestyle/FRS_precomp.cpp +++ /dev/null @@ -1,2 +0,0 @@ -/* Pre-compiled headers, see: D2606. */ -#include "FRS_precomp.h" diff --git a/source/blender/functions/intern/cpp_types.cc b/source/blender/functions/intern/cpp_types.cc index 058fb76af2b..0bbfbc8cb10 100644 --- a/source/blender/functions/intern/cpp_types.cc +++ b/source/blender/functions/intern/cpp_types.cc @@ -18,9 +18,8 @@ #include "FN_field_cpp_type.hh" #include "BLI_color.hh" -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_float4x4.hh" +#include "BLI_math_vec_types.hh" namespace blender::fn { diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h index c7481c6ea67..65d7631445d 100644 --- a/source/blender/imbuf/IMB_imbuf.h +++ b/source/blender/imbuf/IMB_imbuf.h @@ -544,7 +544,7 @@ bool IMB_prepare_write_ImBuf(bool isfloat, struct ImBuf *ibuf); */ bool IMB_ispic(const char *filepath); bool IMB_ispic_type_matches(const char *filepath, int filetype); -int IMB_ispic_type_from_memory(const unsigned char *buf, const size_t buf_size); +int IMB_ispic_type_from_memory(const unsigned char *buf, size_t buf_size); int IMB_ispic_type(const char *filepath); /** @@ -972,28 +972,20 @@ void IMB_update_gpu_texture_sub(struct GPUTexture *tex, /** * \attention defined in stereoimbuf.c */ -void IMB_stereo3d_write_dimensions(char mode, - bool is_squeezed, - const size_t width, - const size_t height, - size_t *r_width, - size_t *r_height); -void IMB_stereo3d_read_dimensions(char mode, - bool is_squeezed, - const size_t width, - const size_t height, - size_t *r_width, - size_t *r_height); +void IMB_stereo3d_write_dimensions( + char mode, bool is_squeezed, size_t width, size_t height, size_t *r_width, size_t *r_height); +void IMB_stereo3d_read_dimensions( + char mode, bool is_squeezed, size_t width, size_t height, size_t *r_width, size_t *r_height); int *IMB_stereo3d_from_rect(struct ImageFormatData *im_format, - const size_t x, - const size_t y, - const size_t channels, + size_t x, + size_t y, + size_t channels, int *rect_left, int *rect_right); float *IMB_stereo3d_from_rectf(struct ImageFormatData *im_format, - const size_t x, - const size_t y, - const size_t channels, + size_t x, + size_t y, + size_t channels, float *rectf_left, float *rectf_right); /** diff --git a/source/blender/imbuf/IMB_metadata.h b/source/blender/imbuf/IMB_metadata.h index 652ce913ee5..50982d08c3e 100644 --- a/source/blender/imbuf/IMB_metadata.h +++ b/source/blender/imbuf/IMB_metadata.h @@ -58,10 +58,7 @@ void IMB_metadata_free(struct IDProperty *metadata); * \param len: length of value buffer allocated by user. * \return 1 (true) if metadata is present and value for the key found, 0 (false) otherwise. */ -bool IMB_metadata_get_field(struct IDProperty *metadata, - const char *key, - char *value, - const size_t len); +bool IMB_metadata_get_field(struct IDProperty *metadata, const char *key, char *value, size_t len); /** * Set user data in the metadata. diff --git a/source/blender/imbuf/intern/IMB_filetype.h b/source/blender/imbuf/intern/IMB_filetype.h index 104458ffa7a..bf6aef3ecd3 100644 --- a/source/blender/imbuf/intern/IMB_filetype.h +++ b/source/blender/imbuf/intern/IMB_filetype.h @@ -41,7 +41,7 @@ typedef struct ImFileType { * \note that this may only read in a small part of the files header, * see: #IMB_ispic_type for details. */ - bool (*is_a)(const unsigned char *buf, const size_t size); + bool (*is_a)(const unsigned char *buf, size_t size); /** Load an image from memory. */ struct ImBuf *(*load)(const unsigned char *mem, @@ -93,7 +93,7 @@ void imb_tile_cache_tile_free(struct ImBuf *ibuf, int tx, int ty); /** \name Format: PNG (#IMB_FTYPE_PNG) * \{ */ -bool imb_is_a_png(const unsigned char *mem, const size_t size); +bool imb_is_a_png(const unsigned char *mem, size_t size); struct ImBuf *imb_loadpng(const unsigned char *mem, size_t size, int flags, @@ -106,7 +106,7 @@ bool imb_savepng(struct ImBuf *ibuf, const char *filepath, int flags); /** \name Format: TARGA (#IMB_FTYPE_TGA) * \{ */ -bool imb_is_a_targa(const unsigned char *buf, const size_t size); +bool imb_is_a_targa(const unsigned char *buf, size_t size); struct ImBuf *imb_loadtarga(const unsigned char *mem, size_t size, int flags, @@ -119,7 +119,7 @@ bool imb_savetarga(struct ImBuf *ibuf, const char *filepath, int flags); /** \name Format: IRIS (#IMB_FTYPE_IMAGIC) * \{ */ -bool imb_is_a_iris(const unsigned char *mem, const size_t size); +bool imb_is_a_iris(const unsigned char *mem, size_t size); /** * Read in a B/W RGB or RGBA iris image file and return an image buffer. */ @@ -135,7 +135,7 @@ bool imb_saveiris(struct ImBuf *ibuf, const char *filepath, int flags); /** \name Format: JP2 (#IMB_FTYPE_JP2) * \{ */ -bool imb_is_a_jp2(const unsigned char *buf, const size_t size); +bool imb_is_a_jp2(const unsigned char *buf, size_t size); struct ImBuf *imb_load_jp2(const unsigned char *mem, size_t size, int flags, @@ -151,7 +151,7 @@ bool imb_save_jp2(struct ImBuf *ibuf, const char *filepath, int flags); /** \name Format: JPEG (#IMB_FTYPE_JPG) * \{ */ -bool imb_is_a_jpeg(const unsigned char *mem, const size_t size); +bool imb_is_a_jpeg(const unsigned char *mem, size_t size); bool imb_savejpeg(struct ImBuf *ibuf, const char *filepath, int flags); struct ImBuf *imb_load_jpeg(const unsigned char *buffer, size_t size, @@ -164,7 +164,7 @@ struct ImBuf *imb_load_jpeg(const unsigned char *buffer, /** \name Format: BMP (#IMB_FTYPE_BMP) * \{ */ -bool imb_is_a_bmp(const unsigned char *buf, const size_t size); +bool imb_is_a_bmp(const unsigned char *buf, size_t size); struct ImBuf *imb_bmp_decode(const unsigned char *mem, size_t size, int flags, @@ -178,7 +178,7 @@ bool imb_savebmp(struct ImBuf *ibuf, const char *filepath, int flags); /** \name Format: CINEON (#IMB_FTYPE_CINEON) * \{ */ -bool imb_is_a_cineon(const unsigned char *buf, const size_t size); +bool imb_is_a_cineon(const unsigned char *buf, size_t size); bool imb_save_cineon(struct ImBuf *buf, const char *filepath, int flags); struct ImBuf *imb_load_cineon(const unsigned char *mem, size_t size, @@ -191,7 +191,7 @@ struct ImBuf *imb_load_cineon(const unsigned char *mem, /** \name Format: DPX (#IMB_FTYPE_DPX) * \{ */ -bool imb_is_a_dpx(const unsigned char *buf, const size_t size); +bool imb_is_a_dpx(const unsigned char *buf, size_t size); bool imb_save_dpx(struct ImBuf *buf, const char *filepath, int flags); struct ImBuf *imb_load_dpx(const unsigned char *mem, size_t size, @@ -204,7 +204,7 @@ struct ImBuf *imb_load_dpx(const unsigned char *mem, /** \name Format: HDR (#IMB_FTYPE_RADHDR) * \{ */ -bool imb_is_a_hdr(const unsigned char *buf, const size_t size); +bool imb_is_a_hdr(const unsigned char *buf, size_t size); struct ImBuf *imb_loadhdr(const unsigned char *mem, size_t size, int flags, @@ -218,7 +218,7 @@ bool imb_savehdr(struct ImBuf *ibuf, const char *filepath, int flags); * \{ */ void imb_inittiff(void); -bool imb_is_a_tiff(const unsigned char *buf, const size_t size); +bool imb_is_a_tiff(const unsigned char *buf, size_t size); /** * Loads a TIFF file. * \param mem: Memory containing the TIFF file. diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index 1d81653c7cd..6a05b681c88 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -879,7 +879,7 @@ static void ffmpeg_postprocess(struct anim *anim) dst2, dstStride2); # else - /* Scale with swscale then flip image over Y axis. */ + /* Scale with swscale. */ int *dstStride = anim->pFrameRGB->linesize; uint8_t **dst = anim->pFrameRGB->data; const int dstStride2[4] = {dstStride[0], 0, 0, 0}; @@ -896,11 +896,12 @@ static void ffmpeg_postprocess(struct anim *anim) dst2, dstStride2); - bottom = (unsigned char *)ibuf->rect; - top = bottom + ibuf->x * (ibuf->y - 1) * 4; + /* Flip destination image buffer over Y axis. */ + bottom = (unsigned char *)dst[0]; + top = bottom + anim->x * (anim->y - 1) * 4; - h = (ibuf->y + 1) / 2; - w = ibuf->x; + h = (anim->y + 1) / 2; + w = anim->x; for (y = 0; y < h; y++) { unsigned char tmp[4]; diff --git a/source/blender/imbuf/intern/dds/dds_api.h b/source/blender/imbuf/intern/dds/dds_api.h index 931c4f267f9..2d540f13a52 100644 --- a/source/blender/imbuf/intern/dds/dds_api.h +++ b/source/blender/imbuf/intern/dds/dds_api.h @@ -26,7 +26,7 @@ extern "C" { #endif -bool imb_is_a_dds(const unsigned char *mem, const size_t size); +bool imb_is_a_dds(const unsigned char *mem, size_t size); bool imb_save_dds(struct ImBuf *ibuf, const char *name, int flags); struct ImBuf *imb_load_dds(const unsigned char *mem, size_t size, diff --git a/source/blender/imbuf/intern/oiio/openimageio_api.h b/source/blender/imbuf/intern/oiio/openimageio_api.h index 659050cdb00..1201bd1b5e0 100644 --- a/source/blender/imbuf/intern/oiio/openimageio_api.h +++ b/source/blender/imbuf/intern/oiio/openimageio_api.h @@ -31,7 +31,7 @@ extern "C" { struct ImBuf; -bool imb_is_a_photoshop(const unsigned char *mem, const size_t size); +bool imb_is_a_photoshop(const unsigned char *mem, size_t size); int imb_save_photoshop(struct ImBuf *ibuf, const char *name, int flags); diff --git a/source/blender/imbuf/intern/openexr/openexr_api.h b/source/blender/imbuf/intern/openexr/openexr_api.h index 14336620926..4321c95db30 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.h +++ b/source/blender/imbuf/intern/openexr/openexr_api.h @@ -36,7 +36,7 @@ void imb_exitopenexr(void); * Test presence of OpenEXR file. * \param mem: pointer to loaded OpenEXR bit-stream. */ -bool imb_is_a_openexr(const unsigned char *mem, const size_t size); +bool imb_is_a_openexr(const unsigned char *mem, size_t size); bool imb_save_openexr(struct ImBuf *ibuf, const char *name, int flags); diff --git a/source/blender/imbuf/intern/radiance_hdr.c b/source/blender/imbuf/intern/radiance_hdr.c index 7f4e4dd31df..925ef0a8502 100644 --- a/source/blender/imbuf/intern/radiance_hdr.c +++ b/source/blender/imbuf/intern/radiance_hdr.c @@ -77,7 +77,7 @@ static const unsigned char *oldreadcolrs(RGBE *scan, scan[0][BLU] = *mem++; scan[0][EXP] = *mem++; if (scan[0][RED] == 1 && scan[0][GRN] == 1 && scan[0][BLU] == 1) { - for (i = scan[0][EXP] << rshift; i > 0; i--) { + for (i = scan[0][EXP] << rshift; i > 0 && len > 0; i--) { COPY_RGBE(scan[-1], scan[0]); scan++; len--; @@ -227,7 +227,7 @@ struct ImBuf *imb_loadhdr(const unsigned char *mem, int found = 0; int width = 0, height = 0; const unsigned char *ptr, *mem_eof = mem + size; - char oriY[80], oriX[80]; + char oriY[3], oriX[3]; if (!imb_is_a_hdr(mem, size)) { return NULL; @@ -244,22 +244,33 @@ struct ImBuf *imb_loadhdr(const unsigned char *mem, } } - if ((found && (x < (size + 2))) == 0) { + if ((found && (x < (size - 1))) == 0) { /* Data not found! */ return NULL; } - if (sscanf((const char *)&mem[x + 1], - "%79s %d %79s %d", - (char *)&oriY, - &height, - (char *)&oriX, - &width) != 4) { + x++; + + /* sscanf requires a null-terminated buffer argument */ + char buf[32] = {0}; + memcpy(buf, &mem[x], MIN2(sizeof(buf) - 1, size - x)); + + if (sscanf(buf, "%2s %d %2s %d", (char *)&oriY, &height, (char *)&oriX, &width) != 4) { + return NULL; + } + + if (width < 1 || height < 1) { return NULL; } + /* Checking that width x height does not extend past mem_eof is not easily possible + * since the format uses RLE compression. Can cause excessive memory allocation to occur. */ + /* find end of this line, data right behind it */ - ptr = (const unsigned char *)strchr((const char *)&mem[x + 1], '\n'); + ptr = (const unsigned char *)strchr((const char *)&mem[x], '\n'); + if (ptr == NULL || ptr >= mem_eof) { + return NULL; + } ptr++; if (flags & IB_test) { diff --git a/source/blender/io/alembic/intern/abc_reader_object.cc b/source/blender/io/alembic/intern/abc_reader_object.cc index 4a359c49d26..86fa580bf1f 100644 --- a/source/blender/io/alembic/intern/abc_reader_object.cc +++ b/source/blender/io/alembic/intern/abc_reader_object.cc @@ -120,29 +120,10 @@ static Imath::M44d blend_matrices(const Imath::M44d &m0, const Imath::M44d &m1, * the matrices manually. */ - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - mat0[i][j] = static_cast<float>(m0[i][j]); - } - } - - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - mat1[i][j] = static_cast<float>(m1[i][j]); - } - } - + convert_matrix_datatype(m0, mat0); + convert_matrix_datatype(m1, mat1); interp_m4_m4m4(ret, mat0, mat1, weight); - - Imath::M44d m; - - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - m[i][j] = ret[i][j]; - } - } - - return m; + return convert_matrix_datatype(ret); } Imath::M44d get_matrix(const IXformSchema &schema, const float time) diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc index f031648d2ed..7868bade8c1 100644 --- a/source/blender/io/gpencil/intern/gpencil_io_base.cc +++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc @@ -23,9 +23,8 @@ * \ingroup bgpencil */ -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_float4x4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_path_util.h" #include "BLI_span.hh" @@ -283,7 +282,7 @@ float GpencilIO::stroke_point_radius_get(bGPDlayer *gpl, bGPDstroke *gps) const float2 screen_ex = gpencil_3D_point_to_2D(&pt->x); const float2 v1 = screen_co - screen_ex; - float radius = v1.length(); + float radius = math::length(v1); BKE_gpencil_free_stroke(gps_perimeter); return MAX2(radius, 1.0f); diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.hh b/source/blender/io/gpencil/intern/gpencil_io_base.hh index 09557cd7a4d..ae54d5056dc 100644 --- a/source/blender/io/gpencil/intern/gpencil_io_base.hh +++ b/source/blender/io/gpencil/intern/gpencil_io_base.hh @@ -22,9 +22,8 @@ * \ingroup bgpencil */ -#include "BLI_float2.hh" -#include "BLI_float3.hh" #include "BLI_float4x4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_vector.hh" #include "DNA_space_types.h" /* for FILE_MAX */ diff --git a/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc index 941d1137f4d..455ebb7c3cb 100644 --- a/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc +++ b/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc @@ -21,8 +21,8 @@ * \ingroup bgpencil */ -#include "BLI_float3.hh" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "DNA_gpencil_types.h" diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh index 9a4dfe3efe3..e6d2853d040 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh +++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh @@ -22,7 +22,7 @@ #include <optional> -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BLI_utility_mixins.hh" #include "BLI_vector.hh" diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc index b99d41e0c72..48136dad5f7 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc +++ b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc @@ -21,8 +21,8 @@ #include "BKE_image.h" #include "BKE_node.h" -#include "BLI_float3.hh" #include "BLI_map.hh" +#include "BLI_math_vec_types.hh" #include "BLI_path_util.h" #include "DNA_material_types.h" @@ -353,9 +353,7 @@ MTLMaterial mtlmaterial_for_material(const Material *material) const nodes::NodeRef *bsdf_node = find_bsdf_node(nodetree); store_bsdf_properties(bsdf_node, material, mtlmat); store_image_textures(bsdf_node, nodetree, material, mtlmat); - if (nodetree) { - delete nodetree; - } + delete nodetree; return mtlmat; } diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh index 2f62d189bd1..a84dcb80a48 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh +++ b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh @@ -20,8 +20,8 @@ #pragma once -#include "BLI_float3.hh" #include "BLI_map.hh" +#include "BLI_math_vec_types.hh" #include "BLI_string_ref.hh" #include "BLI_vector.hh" diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc b/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc index 91aabd8fa76..ec690115115 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc +++ b/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc @@ -18,9 +18,9 @@ * \ingroup obj */ -#include "BLI_float3.hh" #include "BLI_listbase.h" #include "BLI_math.h" +#include "BLI_math_vec_types.hh" #include "DEG_depsgraph.h" #include "DEG_depsgraph_query.h" diff --git a/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc b/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc index 0feca806f35..e7db1c36203 100644 --- a/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc +++ b/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc @@ -197,7 +197,7 @@ static std::string read_temp_file_in_string(const std::string &file_path) TEST(obj_exporter_writer, header) { /* Because testing doesn't fully initialize Blender, we need the following. */ - BKE_tempdir_init(NULL); + BKE_tempdir_init(nullptr); std::string out_file_path = blender::tests::flags_test_release_dir() + "/" + temp_file_path; { OBJExportParamsDefault _export; @@ -235,19 +235,19 @@ TEST(obj_exporter_writer, mtllib) /* Return true if string #a and string #b are equal after their first newline. */ static bool strings_equal_after_first_lines(const std::string &a, const std::string &b) { - /* If `dbg_level > 0` then a failing test will print context around the first mismatch. */ - const bool dbg_level = 0; + /* If `dbg_level` is true then a failing test will print context around the first mismatch. */ + const bool dbg_level = false; const size_t a_len = a.size(); const size_t b_len = b.size(); const size_t a_next = a.find_first_of('\n'); const size_t b_next = b.find_first_of('\n'); if (a_next == std::string::npos || b_next == std::string::npos) { - if (dbg_level > 0) { + if (dbg_level) { std::cout << "Couldn't find newline in one of args\n"; } return false; } - if (dbg_level > 0) { + if (dbg_level) { if (a.compare(a_next, a_len - a_next, b, b_next, b_len - b_next) != 0) { for (int i = 0; i < a_len - a_next && i < b_len - b_next; ++i) { if (a[a_next + i] != b[b_next + i]) { @@ -284,7 +284,7 @@ class obj_exporter_regression_test : public obj_exporter_test { return; } /* Because testing doesn't fully initialize Blender, we need the following. */ - BKE_tempdir_init(NULL); + BKE_tempdir_init(nullptr); std::string tempdir = std::string(BKE_tempdir_base()); std::string out_file_path = tempdir + BLI_path_basename(golden_obj.c_str()); strncpy(params.filepath, out_file_path.c_str(), FILE_MAX - 1); diff --git a/source/blender/makesdna/DNA_defaults.h b/source/blender/makesdna/DNA_defaults.h index 6e986129143..ef7f573e7a8 100644 --- a/source/blender/makesdna/DNA_defaults.h +++ b/source/blender/makesdna/DNA_defaults.h @@ -48,7 +48,9 @@ uint8_t *_DNA_struct_default_alloc_impl(const uint8_t *data_src, #define DNA_struct_default_alloc(struct_name) \ (struct_name *)_DNA_struct_default_alloc_impl( \ - DNA_default_table[SDNA_TYPE_FROM_STRUCT(struct_name)], sizeof(struct_name), __func__) + (const uint8_t *)DNA_default_table[SDNA_TYPE_FROM_STRUCT(struct_name)], \ + sizeof(struct_name), \ + __func__) #ifdef __cplusplus } diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index fc041e257b0..1d0796bda8b 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -1852,6 +1852,7 @@ enum { MOD_TRIANGULATE_QUAD_FIXED = 1, MOD_TRIANGULATE_QUAD_ALTERNATE = 2, MOD_TRIANGULATE_QUAD_SHORTEDGE = 3, + MOD_TRIANGULATE_QUAD_LONGEDGE = 4, }; typedef struct LaplacianSmoothModifierData { diff --git a/source/blender/makesdna/DNA_movieclip_defaults.h b/source/blender/makesdna/DNA_movieclip_defaults.h index 753147eb072..e9013b08d79 100644 --- a/source/blender/makesdna/DNA_movieclip_defaults.h +++ b/source/blender/makesdna/DNA_movieclip_defaults.h @@ -45,6 +45,34 @@ .frame_offset = 0, \ } +#define _DNA_DEFAULT_MovieClipUser \ + { \ + .framenr = 1, \ + .render_size = MCLIP_PROXY_RENDER_SIZE_FULL, \ + .render_flag = 0, \ + } + +#define _DNA_DEFAULT_MovieClipScopes \ + { \ + .ok = 0, \ + .use_track_mask = 0, \ + .track_preview_height = 120, \ + .frame_width = 0, \ + .frame_height = 0, \ + .undist_marker = _DNA_DEFAULT_MovieTrackingMarker, \ + .track_pos = {0, 0}, \ + .track_disabled = 0, \ + .track_locked = 0, \ + .scene_framenr = 0, \ + .slide_scale = {0.0f, 0.0f}, \ + } + +/* initialise as all zeros */ +#define _DNA_DEFAULT_MovieTrackingMarker \ + { \ + 0, \ + } + /** \} */ /* clang-format on */ diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 29d61bcf2ff..114e350b582 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -2118,6 +2118,7 @@ typedef enum GeometryNodeTriangulateQuads { GEO_NODE_TRIANGULATE_QUAD_FIXED = 1, GEO_NODE_TRIANGULATE_QUAD_ALTERNATE = 2, GEO_NODE_TRIANGULATE_QUAD_SHORTEDGE = 3, + GEO_NODE_TRIANGULATE_QUAD_LONGEDGE = 4, } GeometryNodeTriangulateQuads; typedef enum GeometryNodePointInstanceType { diff --git a/source/blender/makesdna/DNA_space_defaults.h b/source/blender/makesdna/DNA_space_defaults.h new file mode 100644 index 00000000000..8b5c6dc1de5 --- /dev/null +++ b/source/blender/makesdna/DNA_space_defaults.h @@ -0,0 +1,67 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup DNA + */ + +#pragma once + +/* Struct members on own line. */ +/* clang-format off */ + +/* -------------------------------------------------------------------- */ +/** \name Spaceclip Struct + * \{ */ + +#define _DNA_DEFAULT_MaskSpaceInfo \ + { \ + .draw_flag = 0, \ + .draw_type = MASK_DT_OUTLINE, \ + .overlay_mode = MASK_OVERLAY_ALPHACHANNEL, \ + } + +#define _DNA_DEFAULT_SpaceClip \ + { \ + .spacetype = SPACE_CLIP, \ + .link_flag = 0, \ + .xof = 0, \ + .yof = 0, \ + .xlockof = 0, \ + .ylockof = 0, \ + .zoom = 1.0f, \ + .user = _DNA_DEFAULT_MovieClipUser, \ + .scopes = _DNA_DEFAULT_MovieClipScopes, \ + .flag = SC_SHOW_MARKER_PATTERN | SC_SHOW_TRACK_PATH | SC_SHOW_GRAPH_TRACKS_MOTION | \ + SC_SHOW_GRAPH_FRAMES | SC_SHOW_ANNOTATION, \ + .mode = SC_MODE_TRACKING, \ + .view = SC_VIEW_CLIP, \ + .path_length = 20, \ + .loc = {0, 0}, \ + .scale = 0, \ + .angle = 0, \ + .stabmat = _DNA_DEFAULT_UNIT_M4, \ + .unistabmat = _DNA_DEFAULT_UNIT_M4, \ + .postproc_flag = 0, \ + .gpencil_src = SC_GPENCIL_SRC_CLIP, \ + .around = V3D_AROUND_CENTER_MEDIAN, \ + .cursor = {0, 0}, \ + .mask_info = _DNA_DEFAULT_MaskSpaceInfo, \ + } + +/** \} */ + +/* clang-format on */ diff --git a/source/blender/makesdna/intern/CMakeLists.txt b/source/blender/makesdna/intern/CMakeLists.txt index db34cf83fa9..a3c54e91780 100644 --- a/source/blender/makesdna/intern/CMakeLists.txt +++ b/source/blender/makesdna/intern/CMakeLists.txt @@ -159,6 +159,7 @@ set(SRC ../DNA_pointcloud_defaults.h ../DNA_scene_defaults.h ../DNA_simulation_defaults.h + ../DNA_space_defaults.h ../DNA_speaker_defaults.h ../DNA_texture_defaults.h ../DNA_vec_defaults.h diff --git a/source/blender/makesdna/intern/dna_defaults.c b/source/blender/makesdna/intern/dna_defaults.c index 1d4257328a4..5bc5de7a20b 100644 --- a/source/blender/makesdna/intern/dna_defaults.c +++ b/source/blender/makesdna/intern/dna_defaults.c @@ -103,6 +103,7 @@ #include "DNA_light_types.h" #include "DNA_lightprobe_types.h" #include "DNA_linestyle_types.h" +#include "DNA_mask_types.h" #include "DNA_material_types.h" #include "DNA_mesh_types.h" #include "DNA_meta_types.h" @@ -144,6 +145,7 @@ #include "DNA_pointcloud_defaults.h" #include "DNA_scene_defaults.h" #include "DNA_simulation_defaults.h" +#include "DNA_space_defaults.h" #include "DNA_speaker_defaults.h" #include "DNA_texture_defaults.h" #include "DNA_volume_defaults.h" @@ -208,6 +210,8 @@ SDNA_DEFAULT_DECL_STRUCT(MetaBall); /* DNA_movieclip_defaults.h */ SDNA_DEFAULT_DECL_STRUCT(MovieClip); +SDNA_DEFAULT_DECL_STRUCT(MovieClipUser); +SDNA_DEFAULT_DECL_STRUCT(MovieClipScopes); /* DNA_object_defaults.h */ SDNA_DEFAULT_DECL_STRUCT(Object); @@ -225,6 +229,9 @@ SDNA_DEFAULT_DECL_STRUCT(ToolSettings); /* DNA_simulation_defaults.h */ SDNA_DEFAULT_DECL_STRUCT(Simulation); +/* DNA_space_defaults.h */ +SDNA_DEFAULT_DECL_STRUCT(SpaceClip); + /* DNA_speaker_defaults.h */ SDNA_DEFAULT_DECL_STRUCT(Speaker); @@ -406,11 +413,18 @@ const void *DNA_default_table[SDNA_TYPE_MAX] = { /* DNA_mesh_defaults.h */ SDNA_DEFAULT_DECL(Mesh), + /* DNA_space_defaults.h */ + SDNA_DEFAULT_DECL(SpaceClip), + SDNA_DEFAULT_DECL_EX(MaskSpaceInfo, SpaceClip.mask_info), + /* DNA_meta_defaults.h */ SDNA_DEFAULT_DECL(MetaBall), /* DNA_movieclip_defaults.h */ SDNA_DEFAULT_DECL(MovieClip), + SDNA_DEFAULT_DECL(MovieClipUser), + SDNA_DEFAULT_DECL(MovieClipScopes), + SDNA_DEFAULT_DECL_EX(MovieTrackingMarker, MovieClipScopes.undist_marker), /* DNA_object_defaults.h */ SDNA_DEFAULT_DECL(Object), diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 20f77626e49..b32d98e3cb1 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -185,6 +185,7 @@ extern StructRNA RNA_CompositorNodeRGBToBW; extern StructRNA RNA_CompositorNodeRLayers; extern StructRNA RNA_CompositorNodeRotate; extern StructRNA RNA_CompositorNodeScale; +extern StructRNA RNA_CompositorNodeSceneTime; extern StructRNA RNA_CompositorNodeSepHSVA; extern StructRNA RNA_CompositorNodeSepRGBA; extern StructRNA RNA_CompositorNodeSepYCCA; @@ -1742,7 +1743,7 @@ bool RNA_struct_override_matches(struct Main *bmain, struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, const char *root_path, - const size_t root_path_len, + size_t root_path_len, struct IDOverrideLibrary *override, eRNAOverrideMatch flags, eRNAOverrideMatchResult *r_report_flags); diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 7e6d0aea2ee..f057d8e9d4c 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -203,6 +203,9 @@ set(INC ../../blenloader ${CMAKE_BINARY_DIR}/source/blender/makesdna/intern + + # dna_type_offsets.h + ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern ) set(INC_SYS diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 20e6e931b4b..95ad184c6b9 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -544,7 +544,7 @@ int rna_property_override_diff_default(struct Main *bmain, int mode, struct IDOverrideLibrary *override, const char *rna_path, - const size_t rna_path_len, + size_t rna_path_len, int flags, bool *r_override_changed); diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h index f0e32a19d04..723ae384fdf 100644 --- a/source/blender/makesrna/intern/rna_internal_types.h +++ b/source/blender/makesrna/intern/rna_internal_types.h @@ -214,7 +214,7 @@ typedef int (*RNAPropOverrideDiff)(struct Main *bmain, int mode, struct IDOverrideLibrary *override, const char *rna_path, - const size_t rna_path_len, + size_t rna_path_len, int flags, bool *r_override_changed); diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c index 9c90c209389..21bacf2e6be 100644 --- a/source/blender/makesrna/intern/rna_mask.c +++ b/source/blender/makesrna/intern/rna_mask.c @@ -23,6 +23,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_defaults.h" #include "DNA_mask_types.h" #include "DNA_object_types.h" /* SELECT */ #include "DNA_scene_types.h" @@ -84,7 +85,7 @@ static void rna_Mask_update_parent(Main *bmain, Scene *scene, PointerRNA *ptr) if (track) { MovieTrackingMarker *marker = BKE_tracking_marker_get(track, clip_framenr); float marker_pos_ofs[2], parmask_pos[2]; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); BKE_movieclip_user_set_frame(&user, scene->r.cfra); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index d46ae13b482..0f0734c8448 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -331,7 +331,12 @@ const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[] = { "SHORTEST_DIAGONAL", 0, "Shortest Diagonal", - "Split the quads based on the distance between the vertices"}, + "Split the quads along their shortest diagonal"}, + {MOD_TRIANGULATE_QUAD_LONGEDGE, + "LONGEST_DIAGONAL", + 0, + "Longest Diagonal", + "Split the quads along their longest diagonal"}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index e7307e6e058..ecbeadf1fa4 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -9488,7 +9488,12 @@ static void def_geo_triangulate(StructRNA *srna) "SHORTEST_DIAGONAL", 0, "Shortest Diagonal", - "Split the quads based on the distance between the vertices"}, + "Split the quads along their shortest diagonal"}, + {GEO_NODE_TRIANGULATE_QUAD_LONGEDGE, + "LONGEST_DIAGONAL", + 0, + "Longest Diagonal", + "Split the quads along their longest diagonal"}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 03f4acdae79..2d4d5ee766f 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -32,6 +32,7 @@ #include "rna_internal.h" +#include "DNA_defaults.h" #include "DNA_movieclip_types.h" #include "DNA_object_types.h" /* SELECT */ #include "DNA_scene_types.h" @@ -609,7 +610,7 @@ static MovieTrackingTrack *add_track_to_base( MovieClip *clip, MovieTracking *tracking, ListBase *tracksbase, const char *name, int frame) { int width, height; - MovieClipUser user = {0}; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); MovieTrackingTrack *track; user.framenr = 1; diff --git a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc index 778b5746471..910b52dea67 100644 --- a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc +++ b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc @@ -197,8 +197,8 @@ static float compute_voxel_size(const ModifierEvalContext *ctx, /* Compute the voxel size based on the desired number of voxels and the approximated bounding box * of the volume. */ const BoundBox *bb = BKE_object_boundbox_get(mvmd->object); - const float diagonal = float3::distance(transform * float3(bb->vec[6]), - transform * float3(bb->vec[0])); + const float diagonal = math::distance(transform * float3(bb->vec[6]), + transform * float3(bb->vec[0])); const float approximate_volume_side_length = diagonal + mvmd->exterior_band_width * 2.0f; const float voxel_size = approximate_volume_side_length / mvmd->voxel_amount / volume_simplify; return voxel_size; diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index cee5d0be65d..49528845197 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -28,8 +28,8 @@ #include "MEM_guardedalloc.h" #include "BLI_array.hh" -#include "BLI_float3.hh" #include "BLI_listbase.h" +#include "BLI_math_vec_types.hh" #include "BLI_multi_value_map.hh" #include "BLI_set.hh" #include "BLI_string.h" diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index f965302be5e..957c5b78342 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -48,6 +48,9 @@ set(INC ../windowmanager ../../../intern/glew-mx ../../../intern/guardedalloc + + # dna_type_offsets.h + ${CMAKE_CURRENT_BINARY_DIR}/../makesdna/intern ) diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h index 72539f6081e..c80d0bcdd1e 100644 --- a/source/blender/nodes/NOD_composite.h +++ b/source/blender/nodes/NOD_composite.h @@ -43,6 +43,7 @@ void register_node_type_cmp_texture(void); void register_node_type_cmp_value(void); void register_node_type_cmp_rgb(void); void register_node_type_cmp_curve_time(void); +void register_node_type_cmp_scene_time(void); void register_node_type_cmp_movieclip(void); void register_node_type_cmp_composite(void); diff --git a/source/blender/nodes/NOD_math_functions.hh b/source/blender/nodes/NOD_math_functions.hh index a0a2e6f81f8..6ea89beee2e 100644 --- a/source/blender/nodes/NOD_math_functions.hh +++ b/source/blender/nodes/NOD_math_functions.hh @@ -18,9 +18,9 @@ #include "DNA_node_types.h" -#include "BLI_float3.hh" #include "BLI_math_base_safe.h" #include "BLI_math_rotation.h" +#include "BLI_math_vec_types.hh" #include "BLI_string_ref.hh" namespace blender::nodes { @@ -240,6 +240,8 @@ template<typename Callback> inline bool try_dispatch_float_math_fl3_fl3_to_fl3(const NodeVectorMathOperation operation, Callback &&callback) { + using namespace blender::math; + const FloatMathOperationInfo *info = get_float3_math_operation_info(operation); if (info == nullptr) { return false; @@ -259,40 +261,21 @@ inline bool try_dispatch_float_math_fl3_fl3_to_fl3(const NodeVectorMathOperation case NODE_VECTOR_MATH_MULTIPLY: return dispatch([](float3 a, float3 b) { return a * b; }); case NODE_VECTOR_MATH_DIVIDE: - return dispatch([](float3 a, float3 b) { - return float3(safe_divide(a.x, b.x), safe_divide(a.y, b.y), safe_divide(a.z, b.z)); - }); + return dispatch([](float3 a, float3 b) { return safe_divide(a, b); }); case NODE_VECTOR_MATH_CROSS_PRODUCT: - return dispatch([](float3 a, float3 b) { return float3::cross_high_precision(a, b); }); + return dispatch([](float3 a, float3 b) { return cross_high_precision(a, b); }); case NODE_VECTOR_MATH_PROJECT: - return dispatch([](float3 a, float3 b) { - float length_squared = b.length_squared(); - return (length_squared != 0.0) ? (float3::dot(a, b) / length_squared) * b : float3(0.0f); - }); + return dispatch([](float3 a, float3 b) { return project(a, b); }); case NODE_VECTOR_MATH_REFLECT: - return dispatch([](float3 a, float3 b) { - b.normalize(); - return a.reflected(b); - }); + return dispatch([](float3 a, float3 b) { return reflect(a, normalize(b)); }); case NODE_VECTOR_MATH_SNAP: - return dispatch([](float3 a, float3 b) { - return float3(floor(safe_divide(a.x, b.x)), - floor(safe_divide(a.y, b.y)), - floor(safe_divide(a.z, b.z))) * - b; - }); + return dispatch([](float3 a, float3 b) { return floor(safe_divide(a, b)) * b; }); case NODE_VECTOR_MATH_MODULO: - return dispatch([](float3 a, float3 b) { - return float3(safe_modf(a.x, b.x), safe_modf(a.y, b.y), safe_modf(a.z, b.z)); - }); + return dispatch([](float3 a, float3 b) { return mod(a, b); }); case NODE_VECTOR_MATH_MINIMUM: - return dispatch([](float3 a, float3 b) { - return float3(min_ff(a.x, b.x), min_ff(a.y, b.y), min_ff(a.z, b.z)); - }); + return dispatch([](float3 a, float3 b) { return min(a, b); }); case NODE_VECTOR_MATH_MAXIMUM: - return dispatch([](float3 a, float3 b) { - return float3(max_ff(a.x, b.x), max_ff(a.y, b.y), max_ff(a.z, b.z)); - }); + return dispatch([](float3 a, float3 b) { return max(a, b); }); default: return false; } @@ -306,6 +289,8 @@ template<typename Callback> inline bool try_dispatch_float_math_fl3_fl3_to_fl(const NodeVectorMathOperation operation, Callback &&callback) { + using namespace blender::math; + const FloatMathOperationInfo *info = get_float3_math_operation_info(operation); if (info == nullptr) { return false; @@ -319,9 +304,9 @@ inline bool try_dispatch_float_math_fl3_fl3_to_fl(const NodeVectorMathOperation switch (operation) { case NODE_VECTOR_MATH_DOT_PRODUCT: - return dispatch([](float3 a, float3 b) { return float3::dot(a, b); }); + return dispatch([](float3 a, float3 b) { return dot(a, b); }); case NODE_VECTOR_MATH_DISTANCE: - return dispatch([](float3 a, float3 b) { return float3::distance(a, b); }); + return dispatch([](float3 a, float3 b) { return distance(a, b); }); default: return false; } @@ -335,6 +320,8 @@ template<typename Callback> inline bool try_dispatch_float_math_fl3_fl3_fl3_to_fl3(const NodeVectorMathOperation operation, Callback &&callback) { + using namespace blender::math; + const FloatMathOperationInfo *info = get_float3_math_operation_info(operation); if (info == nullptr) { return false; @@ -354,7 +341,7 @@ inline bool try_dispatch_float_math_fl3_fl3_fl3_to_fl3(const NodeVectorMathOpera return float3(wrapf(a.x, b.x, c.x), wrapf(a.y, b.y, c.y), wrapf(a.z, b.z, c.z)); }); case NODE_VECTOR_MATH_FACEFORWARD: - return dispatch([](float3 a, float3 b, float3 c) { return float3::faceforward(a, b, c); }); + return dispatch([](float3 a, float3 b, float3 c) { return faceforward(a, b, c); }); default: return false; } @@ -368,6 +355,8 @@ template<typename Callback> inline bool try_dispatch_float_math_fl3_fl3_fl_to_fl3(const NodeVectorMathOperation operation, Callback &&callback) { + using namespace blender::math; + const FloatMathOperationInfo *info = get_float3_math_operation_info(operation); if (info == nullptr) { return false; @@ -381,8 +370,7 @@ inline bool try_dispatch_float_math_fl3_fl3_fl_to_fl3(const NodeVectorMathOperat switch (operation) { case NODE_VECTOR_MATH_REFRACT: - return dispatch( - [](float3 a, float3 b, float c) { return float3::refract(a, b.normalized(), c); }); + return dispatch([](float3 a, float3 b, float c) { return refract(a, normalize(b), c); }); default: return false; } @@ -396,6 +384,8 @@ template<typename Callback> inline bool try_dispatch_float_math_fl3_to_fl(const NodeVectorMathOperation operation, Callback &&callback) { + using namespace blender::math; + const FloatMathOperationInfo *info = get_float3_math_operation_info(operation); if (info == nullptr) { return false; @@ -409,7 +399,7 @@ inline bool try_dispatch_float_math_fl3_to_fl(const NodeVectorMathOperation oper switch (operation) { case NODE_VECTOR_MATH_LENGTH: - return dispatch([](float3 in) { return in.length(); }); + return dispatch([](float3 in) { return length(in); }); default: return false; } @@ -450,6 +440,8 @@ template<typename Callback> inline bool try_dispatch_float_math_fl3_to_fl3(const NodeVectorMathOperation operation, Callback &&callback) { + using namespace blender::math; + const FloatMathOperationInfo *info = get_float3_math_operation_info(operation); if (info == nullptr) { return false; @@ -463,20 +455,15 @@ inline bool try_dispatch_float_math_fl3_to_fl3(const NodeVectorMathOperation ope switch (operation) { case NODE_VECTOR_MATH_NORMALIZE: - return dispatch([](float3 in) { - float3 out = in; - out.normalize(); - return out; - }); /* Should be safe. */ + return dispatch([](float3 in) { return normalize(in); }); /* Should be safe. */ case NODE_VECTOR_MATH_FLOOR: - return dispatch([](float3 in) { return float3(floor(in.x), floor(in.y), floor(in.z)); }); + return dispatch([](float3 in) { return floor(in); }); case NODE_VECTOR_MATH_CEIL: - return dispatch([](float3 in) { return float3(ceil(in.x), ceil(in.y), ceil(in.z)); }); + return dispatch([](float3 in) { return ceil(in); }); case NODE_VECTOR_MATH_FRACTION: - return dispatch( - [](float3 in) { return in - float3(floor(in.x), floor(in.y), floor(in.z)); }); + return dispatch([](float3 in) { return fract(in); }); case NODE_VECTOR_MATH_ABSOLUTE: - return dispatch([](float3 in) { return float3::abs(in); }); + return dispatch([](float3 in) { return abs(in); }); case NODE_VECTOR_MATH_SINE: return dispatch([](float3 in) { return float3(sinf(in.x), sinf(in.y), sinf(in.z)); }); case NODE_VECTOR_MATH_COSINE: diff --git a/source/blender/nodes/NOD_socket_declarations.hh b/source/blender/nodes/NOD_socket_declarations.hh index c0580a2c919..a1972c66ca2 100644 --- a/source/blender/nodes/NOD_socket_declarations.hh +++ b/source/blender/nodes/NOD_socket_declarations.hh @@ -21,7 +21,7 @@ #include "RNA_types.h" #include "BLI_color.hh" -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" namespace blender::nodes::decl { diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index 07a29677b72..e3566f81e2d 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -148,7 +148,7 @@ DefNode(CompositorNode, CMP_NODE_BLUR, def_cmp_blur, "BLUR", DefNode(CompositorNode, CMP_NODE_FILTER, def_cmp_filter, "FILTER", Filter, "Filter", "" ) DefNode(CompositorNode, CMP_NODE_MAP_VALUE, def_cmp_map_value, "MAP_VALUE", MapValue, "Map Value", "" ) DefNode(CompositorNode, CMP_NODE_MAP_RANGE, def_cmp_map_range, "MAP_RANGE", MapRange, "Map Range", "" ) -DefNode(CompositorNode, CMP_NODE_TIME, def_time, "TIME", Time, "Time", "" ) +DefNode(CompositorNode, CMP_NODE_TIME, def_time, "TIME", Time, "Time Curve", "" ) DefNode(CompositorNode, CMP_NODE_VECBLUR, def_cmp_vector_blur, "VECBLUR", VecBlur, "Vector Blur", "" ) DefNode(CompositorNode, CMP_NODE_SEPRGBA, 0, "SEPRGBA", SepRGBA, "Separate RGBA", "" ) DefNode(CompositorNode, CMP_NODE_SEPHSVA, 0, "SEPHSVA", SepHSVA, "Separate HSVA", "" ) @@ -228,6 +228,7 @@ DefNode(CompositorNode, CMP_NODE_EXPOSURE, 0, "EXPOSU DefNode(CompositorNode, CMP_NODE_ANTIALIASING, def_cmp_antialiasing, "ANTIALIASING", AntiAliasing, "Anti-Aliasing", "" ) DefNode(CompositorNode, CMP_NODE_POSTERIZE, 0, "POSTERIZE", Posterize, "Posterize", "" ) DefNode(CompositorNode, CMP_NODE_CONVERT_COLOR_SPACE,def_cmp_convert_color_space, "CONVERT_COLORSPACE", ConvertColorSpace, "Color Space","" ) +DefNode(CompositorNode, CMP_NODE_SCENE_TIME, 0, "SCENE_TIME", SceneTime, "Scene Time", "" ) DefNode(TextureNode, TEX_NODE_OUTPUT, def_tex_output, "OUTPUT", Output, "Output", "" ) DefNode(TextureNode, TEX_NODE_CHECKER, 0, "CHECKER", Checker, "Checker", "" ) diff --git a/source/blender/nodes/composite/CMakeLists.txt b/source/blender/nodes/composite/CMakeLists.txt index 086c820ce1e..0374f913d4b 100644 --- a/source/blender/nodes/composite/CMakeLists.txt +++ b/source/blender/nodes/composite/CMakeLists.txt @@ -33,6 +33,9 @@ set(INC ../../render ../../windowmanager ../../../../intern/guardedalloc + + # dna_type_offsets.h + ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern ) @@ -122,6 +125,7 @@ set(SRC nodes/node_composite_vec_blur.cc nodes/node_composite_viewer.cc nodes/node_composite_zcombine.cc + nodes/node_composite_scene_time.cc node_composite_tree.cc node_composite_util.cc diff --git a/source/blender/nodes/composite/node_composite_tree.cc b/source/blender/nodes/composite/node_composite_tree.cc index 08dbd4ad6f0..c54382cc1ad 100644 --- a/source/blender/nodes/composite/node_composite_tree.cc +++ b/source/blender/nodes/composite/node_composite_tree.cc @@ -249,23 +249,6 @@ void ntreeCompositUpdateRLayers(bNodeTree *ntree) } } -void ntreeCompositRegisterPass(bNodeTree *ntree, - Scene *scene, - ViewLayer *view_layer, - const char *name, - eNodeSocketDatatype type) -{ - if (ntree == nullptr) { - return; - } - - LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { - if (node->type == CMP_NODE_R_LAYERS) { - node_cmp_rlayers_register_pass(ntree, node, scene, view_layer, name, type); - } - } -} - void ntreeCompositTagRender(Scene *scene) { /* XXX Think using G_MAIN here is valid, since you want to update current file's scene nodes, diff --git a/source/blender/nodes/composite/nodes/node_composite_curves.cc b/source/blender/nodes/composite/nodes/node_composite_curves.cc index cb96fd0bb60..12390a8549d 100644 --- a/source/blender/nodes/composite/nodes/node_composite_curves.cc +++ b/source/blender/nodes/composite/nodes/node_composite_curves.cc @@ -51,7 +51,7 @@ void register_node_type_cmp_curve_time() static bNodeType ntype; - cmp_node_type_base(&ntype, CMP_NODE_TIME, "Time", NODE_CLASS_INPUT); + cmp_node_type_base(&ntype, CMP_NODE_TIME, "Time Curve", NODE_CLASS_INPUT); ntype.declare = file_ns::cmp_node_time_declare; node_type_size(&ntype, 200, 140, 320); node_type_init(&ntype, file_ns::node_composit_init_curves_time); diff --git a/source/blender/nodes/composite/nodes/node_composite_image.cc b/source/blender/nodes/composite/nodes/node_composite_image.cc index 6f4f9d7e597..f2b9fbc2215 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.cc +++ b/source/blender/nodes/composite/nodes/node_composite_image.cc @@ -269,7 +269,12 @@ void node_cmp_rlayers_register_pass(bNodeTree *ntree, } } -static void cmp_node_rlayer_create_outputs_cb(void *UNUSED(userdata), +struct CreateOutputUserData { + bNodeTree &ntree; + bNode &node; +}; + +static void cmp_node_rlayer_create_outputs_cb(void *userdata, Scene *scene, ViewLayer *view_layer, const char *name, @@ -277,18 +282,8 @@ static void cmp_node_rlayer_create_outputs_cb(void *UNUSED(userdata), const char *UNUSED(chanid), eNodeSocketDatatype type) { - /* Register the pass in all scenes that have a render layer node for this layer. - * Since multiple scenes can be used in the compositor, the code must loop over all scenes - * and check whether their nodetree has a node that needs to be updated. */ - /* NOTE: using G_MAIN seems valid here, - * unless we want to register that for every other temp Main we could generate??? */ - ntreeCompositRegisterPass(scene->nodetree, scene, view_layer, name, type); - - for (Scene *sce = (Scene *)G_MAIN->scenes.first; sce; sce = (Scene *)sce->id.next) { - if (sce->nodetree && sce != scene) { - ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type); - } - } + CreateOutputUserData &data = *(CreateOutputUserData *)userdata; + node_cmp_rlayers_register_pass(&data.ntree, &data.node, scene, view_layer, name, type); } static void cmp_node_rlayer_create_outputs(bNodeTree *ntree, @@ -308,14 +303,17 @@ static void cmp_node_rlayer_create_outputs(bNodeTree *ntree, data->prev_index = -1; node->storage = data; + CreateOutputUserData userdata = {*ntree, *node}; + RenderEngine *engine = RE_engine_create(engine_type); RE_engine_update_render_passes( - engine, scene, view_layer, cmp_node_rlayer_create_outputs_cb, nullptr); + engine, scene, view_layer, cmp_node_rlayer_create_outputs_cb, &userdata); RE_engine_free(engine); if ((scene->r.mode & R_EDGE_FRS) && (view_layer->freestyle_config.flags & FREESTYLE_AS_RENDER_PASS)) { - ntreeCompositRegisterPass(ntree, scene, view_layer, RE_PASSNAME_FREESTYLE, SOCK_RGBA); + node_cmp_rlayers_register_pass( + ntree, node, scene, view_layer, RE_PASSNAME_FREESTYLE, SOCK_RGBA); } MEM_freeN(data); diff --git a/source/blender/nodes/composite/nodes/node_composite_movieclip.cc b/source/blender/nodes/composite/nodes/node_composite_movieclip.cc index 94f32ae8db4..f6f00864839 100644 --- a/source/blender/nodes/composite/nodes/node_composite_movieclip.cc +++ b/source/blender/nodes/composite/nodes/node_composite_movieclip.cc @@ -23,6 +23,7 @@ #include "BKE_context.h" #include "BKE_lib_id.h" +#include "DNA_defaults.h" #include "RNA_access.h" @@ -47,7 +48,7 @@ static void init(const bContext *C, PointerRNA *ptr) { bNode *node = (bNode *)ptr->data; Scene *scene = CTX_data_scene(C); - MovieClipUser *user = MEM_cnew<MovieClipUser>(__func__); + MovieClipUser *user = DNA_struct_default_alloc(MovieClipUser); node->id = (ID *)scene->clip; id_us_plus(node->id); diff --git a/source/blender/nodes/composite/nodes/node_composite_scene_time.cc b/source/blender/nodes/composite/nodes/node_composite_scene_time.cc new file mode 100644 index 00000000000..845390665f2 --- /dev/null +++ b/source/blender/nodes/composite/nodes/node_composite_scene_time.cc @@ -0,0 +1,39 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +/** \file + * \ingroup cmpnodes + */ + +#include "node_composite_util.hh" + +namespace blender::nodes { + +static void cmp_node_scene_time_declare(NodeDeclarationBuilder &b) +{ + b.add_output<decl::Float>(N_("Seconds")); + b.add_output<decl::Float>(N_("Frame")); +} + +} // namespace blender::nodes + +void register_node_type_cmp_scene_time() +{ + static bNodeType ntype; + + cmp_node_type_base(&ntype, CMP_NODE_SCENE_TIME, "Scene Time", NODE_CLASS_INPUT); + ntype.declare = blender::nodes::cmp_node_scene_time_declare; + nodeRegisterType(&ntype); +}
\ No newline at end of file diff --git a/source/blender/nodes/function/node_function_util.hh b/source/blender/nodes/function/node_function_util.hh index acde9c4b55b..69c617b4f01 100644 --- a/source/blender/nodes/function/node_function_util.hh +++ b/source/blender/nodes/function/node_function_util.hh @@ -18,7 +18,7 @@ #include <string.h> -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BLI_utildefines.h" #include "MEM_guardedalloc.h" diff --git a/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc b/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc index f4ce8d2f35a..bcc035e6ede 100644 --- a/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc +++ b/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc @@ -69,14 +69,14 @@ static void align_rotations_auto_pivot(IndexMask mask, float3 old_axis; mul_v3_m3v3(old_axis, old_rotation, local_main_axis); - const float3 new_axis = vector.normalized(); - float3 rotation_axis = float3::cross_high_precision(old_axis, new_axis); + const float3 new_axis = math::normalize(vector); + float3 rotation_axis = math::cross_high_precision(old_axis, new_axis); if (is_zero_v3(rotation_axis)) { /* The vectors are linearly dependent, so we fall back to another axis. */ - rotation_axis = float3::cross_high_precision(old_axis, float3(1, 0, 0)); + rotation_axis = math::cross_high_precision(old_axis, float3(1, 0, 0)); if (is_zero_v3(rotation_axis)) { /* This is now guaranteed to not be zero. */ - rotation_axis = float3::cross_high_precision(old_axis, float3(0, 1, 0)); + rotation_axis = math::cross_high_precision(old_axis, float3(0, 1, 0)); } } diff --git a/source/blender/nodes/function/nodes/node_fn_compare.cc b/source/blender/nodes/function/nodes/node_fn_compare.cc index 3bb46511eeb..7c09bace756 100644 --- a/source/blender/nodes/function/nodes/node_fn_compare.cc +++ b/source/blender/nodes/function/nodes/node_fn_compare.cc @@ -265,7 +265,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_DOT_PRODUCT: { static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{ "Less Than - Dot Product", - [](float3 a, float3 b, float comp) { return float3::dot(a, b) < comp; }}; + [](float3 a, float3 b, float comp) { return math::dot(a, b) < comp; }}; return &fn; } case NODE_COMPARE_MODE_DIRECTION: { @@ -283,7 +283,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_LENGTH: { static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{ "Less Than - Length", - [](float3 a, float3 b) { return a.length() < b.length(); }}; + [](float3 a, float3 b) { return math::length(a) < math::length(b); }}; return &fn; } } @@ -299,7 +299,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_DOT_PRODUCT: { static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{ "Less Equal - Dot Product", - [](float3 a, float3 b, float comp) { return float3::dot(a, b) <= comp; }}; + [](float3 a, float3 b, float comp) { return math::dot(a, b) <= comp; }}; return &fn; } case NODE_COMPARE_MODE_DIRECTION: { @@ -317,7 +317,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_LENGTH: { static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{ "Less Equal - Length", - [](float3 a, float3 b) { return a.length() <= b.length(); }}; + [](float3 a, float3 b) { return math::length(a) <= math::length(b); }}; return &fn; } } @@ -333,7 +333,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_DOT_PRODUCT: { static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{ "Greater Than - Dot Product", - [](float3 a, float3 b, float comp) { return float3::dot(a, b) > comp; }}; + [](float3 a, float3 b, float comp) { return math::dot(a, b) > comp; }}; return &fn; } case NODE_COMPARE_MODE_DIRECTION: { @@ -351,7 +351,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_LENGTH: { static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{ "Greater Than - Length", - [](float3 a, float3 b) { return a.length() > b.length(); }}; + [](float3 a, float3 b) { return math::length(a) > math::length(b); }}; return &fn; } } @@ -367,7 +367,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_DOT_PRODUCT: { static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{ "Greater Equal - Dot Product", - [](float3 a, float3 b, float comp) { return float3::dot(a, b) >= comp; }}; + [](float3 a, float3 b, float comp) { return math::dot(a, b) >= comp; }}; return &fn; } case NODE_COMPARE_MODE_DIRECTION: { @@ -385,7 +385,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_LENGTH: { static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{ "Greater Equal - Length", - [](float3 a, float3 b) { return a.length() >= b.length(); }}; + [](float3 a, float3 b) { return math::length(a) >= math::length(b); }}; return &fn; } } @@ -402,7 +402,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_DOT_PRODUCT: { static fn::CustomMF_SI_SI_SI_SI_SO<float3, float3, float, float, bool> fn{ "Equal - Dot Product", [](float3 a, float3 b, float comp, float epsilon) { - return abs(float3::dot(a, b) - comp) <= epsilon; + return abs(math::dot(a, b) - comp) <= epsilon; }}; return &fn; } @@ -424,7 +424,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_LENGTH: { static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{ "Equal - Length", [](float3 a, float3 b, float epsilon) { - return abs(a.length() - b.length()) <= epsilon; + return abs(math::length(a) - math::length(b)) <= epsilon; }}; return &fn; } @@ -442,7 +442,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_DOT_PRODUCT: { static fn::CustomMF_SI_SI_SI_SI_SO<float3, float3, float, float, bool> fn{ "Not Equal - Dot Product", [](float3 a, float3 b, float comp, float epsilon) { - return abs(float3::dot(a, b) - comp) >= epsilon; + return abs(math::dot(a, b) - comp) >= epsilon; }}; return &fn; } @@ -464,7 +464,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node) case NODE_COMPARE_MODE_LENGTH: { static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{ "Not Equal - Length", [](float3 a, float3 b, float epsilon) { - return abs(a.length() - b.length()) > epsilon; + return abs(math::length(a) - math::length(b)) > epsilon; }}; return &fn; } diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh index f0f2b64ec4e..dddc3527124 100644 --- a/source/blender/nodes/geometry/node_geometry_util.hh +++ b/source/blender/nodes/geometry/node_geometry_util.hh @@ -18,7 +18,7 @@ #include <string.h> -#include "BLI_float3.hh" +#include "BLI_math_vec_types.hh" #include "BLI_utildefines.h" #include "MEM_guardedalloc.h" @@ -83,7 +83,7 @@ Mesh *create_cylinder_or_cone_mesh(float radius_top, int circle_segments, int side_segments, int fill_segments, - const GeometryNodeMeshCircleFillType fill_type, + GeometryNodeMeshCircleFillType fill_type, ConeAttributeOutputs &attribute_outputs); Mesh *create_cuboid_mesh(float3 size, int verts_x, int verts_y, int verts_z); diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc index 36ad4605a4b..1d064586238 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc @@ -90,14 +90,14 @@ static void align_rotations_auto_pivot(const VArray<float3> &vectors, float3 old_axis; mul_v3_m3v3(old_axis, old_rotation, local_main_axis); - const float3 new_axis = vector.normalized(); - float3 rotation_axis = float3::cross_high_precision(old_axis, new_axis); + const float3 new_axis = math::normalize(vector); + float3 rotation_axis = math::cross_high_precision(old_axis, new_axis); if (is_zero_v3(rotation_axis)) { /* The vectors are linearly dependent, so we fall back to another axis. */ - rotation_axis = float3::cross_high_precision(old_axis, float3(1, 0, 0)); + rotation_axis = math::cross_high_precision(old_axis, float3(1, 0, 0)); if (is_zero_v3(rotation_axis)) { /* This is now guaranteed to not be zero. */ - rotation_axis = float3::cross_high_precision(old_axis, float3(0, 1, 0)); + rotation_axis = math::cross_high_precision(old_axis, float3(0, 1, 0)); } } diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc index 74dac73f255..20f500b1bd8 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc @@ -81,7 +81,7 @@ static void calculate_mesh_proximity(const VArray<float3> &positions, for (int i : range) { /* Use the distance to the last found point as upper bound to speedup the bvh lookup. */ - nearest.dist_sq = float3::distance_squared(nearest.co, positions[i]); + nearest.dist_sq = math::distance_squared(float3(nearest.co), positions[i]); BLI_bvhtree_find_nearest( bvh_data.tree, positions[i], &nearest, bvh_data.nearest_callback, &bvh_data); diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc index b0210f2eb94..a85a7c56cb9 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc @@ -229,7 +229,7 @@ static void get_closest_mesh_corners(const Mesh &mesh, const MLoop &loop = mesh.mloop[loop_index]; const int vertex_index = loop.v; const MVert &mvert = mesh.mvert[vertex_index]; - const float distance_sq = float3::distance_squared(position, mvert.co); + const float distance_sq = math::distance_squared(position, float3(mvert.co)); if (distance_sq < min_distance_sq) { min_distance_sq = distance_sq; closest_loop_index = loop_index; diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc index 8555d7cc8a3..1e6b7f92a77 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc @@ -241,13 +241,13 @@ static void copy_uniform_sample_point_attributes(Span<SplinePtr> splines, spline.sample_with_index_factors<float3>( spline.evaluated_tangents(), uniform_samples, data.tangents.slice(offset, size)); for (float3 &tangent : data.tangents) { - tangent.normalize(); + tangent = math::normalize(tangent); } spline.sample_with_index_factors<float3>( spline.evaluated_normals(), uniform_samples, data.normals.slice(offset, size)); for (float3 &normals : data.normals) { - normals.normalize(); + normals = math::normalize(normals); } } }); diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc index c712e82ca18..29eff373d15 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc @@ -321,7 +321,7 @@ BLI_NOINLINE static void interpolate_existing_attributes( continue; } - for (const int UNUSED(i_set_instance) : set_group.transforms.index_range()) { + for ([[maybe_unused]] const int i_set_instance : set_group.transforms.index_range()) { const int offset = instance_start_offsets[i_instance]; Span<float3> bary_coords = bary_coords_array[i_instance]; Span<int> looptri_indices = looptri_indices_array[i_instance]; @@ -516,7 +516,7 @@ static void distribute_points_poisson_disk(Span<GeometryInstanceGroup> set_group const VArray<float> density_factors = component.attribute_get_for_read<float>( density_attribute_name, ATTR_DOMAIN_CORNER, use_one_default ? 1.0f : 0.0f); - for (const int UNUSED(i_set_instance) : set_group.transforms.index_range()) { + for ([[maybe_unused]] const int i_set_instance : set_group.transforms.index_range()) { Vector<float3> &positions = positions_all[i_instance]; Vector<float3> &bary_coords = bary_coords_all[i_instance]; Vector<int> &looptri_indices = looptri_indices_all[i_instance]; diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc index 7b1bbed8ae4..f54ffc53a6e 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc @@ -161,7 +161,7 @@ static float compute_voxel_size(const GeoNodeExecParams ¶ms, } /* The voxel size adapts to the final size of the volume. */ - const float diagonal = float3::distance(min, max); + const float diagonal = math::distance(min, max); const float extended_diagonal = diagonal + 2.0f * radius; const float voxel_size = extended_diagonal / voxel_amount; return voxel_size; diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc index dd03092a594..cfae88e0625 100644 --- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc +++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc @@ -107,7 +107,7 @@ static void raycast_to_mesh(const Mesh &mesh, for (const int i : ray_origins.index_range()) { const float ray_length = ray_lengths[i]; const float3 ray_origin = ray_origins[i]; - const float3 ray_direction = ray_directions[i].normalized(); + const float3 ray_direction = math::normalize(ray_directions[i]); BVHTreeRayHit hit; hit.index = -1; diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc index 7e09721273a..929d9046f98 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc @@ -16,7 +16,7 @@ #include "BLI_array.hh" #include "BLI_delaunay_2d.h" -#include "BLI_double2.hh" +#include "BLI_math_vec_types.hh" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc index 1a44fce86a6..68b609f8045 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc @@ -122,9 +122,9 @@ static Array<float3> calculate_directions(const Span<float3> positions) Array<float3> directions(size); for (const int i : IndexRange(size - 1)) { - directions[i] = (positions[i + 1] - positions[i]).normalized(); + directions[i] = math::normalize(positions[i + 1] - positions[i]); } - directions[size - 1] = (positions[0] - positions[size - 1]).normalized(); + directions[size - 1] = math::normalize(positions[0] - positions[size - 1]); return directions; } @@ -135,9 +135,9 @@ static Array<float3> calculate_axes(const Span<float3> directions) const int size = directions.size(); Array<float3> axes(size); - axes[0] = float3::cross(-directions[size - 1], directions[0]).normalized(); + axes[0] = math::normalize(math::cross(-directions[size - 1], directions[0])); for (const int i : IndexRange(1, size - 1)) { - axes[i] = float3::cross(-directions[i - 1], directions[i]).normalized(); + axes[i] = math::normalize(math::cross(-directions[i - 1], directions[i])); } return axes; @@ -248,8 +248,8 @@ static void limit_radii(FilletData &fd, const bool cyclic) if (cyclic) { /* Calculate lengths between adjacent control points. */ - const float len_prev = float3::distance(positions[0], positions[size - 1]); - const float len_next = float3::distance(positions[0], positions[1]); + const float len_prev = math::distance(positions[0], positions[size - 1]); + const float len_next = math::distance(positions[0], positions[1]); /* Calculate tangent lengths of fillets in control points. */ const float tan_len = radii[0] * tan(angles[0] / 2.0f); @@ -271,16 +271,16 @@ static void limit_radii(FilletData &fd, const bool cyclic) } /* Initialize max_radii to largest possible radii. */ - float prev_dist = float3::distance(positions[1], positions[0]); + float prev_dist = math::distance(positions[1], positions[0]); for (const int i : IndexRange(1, size - 2)) { - const float temp_dist = float3::distance(positions[i], positions[i + 1]); + const float temp_dist = math::distance(positions[i], positions[i + 1]); max_radii[i] = std::min(prev_dist, temp_dist) / tan(angles[i] / 2.0f); prev_dist = temp_dist; } /* Max radii calculations for each index. */ for (const int i : IndexRange(start, fillet_count - 1)) { - const float len_next = float3::distance(positions[i], positions[i + 1]); + const float len_next = math::distance(positions[i], positions[i + 1]); const float tan_len = radii[i] * tan(angles[i] / 2.0f); const float tan_len_next = radii[i + 1] * tan(angles[i + 1] / 2.0f); @@ -415,7 +415,8 @@ static void update_bezier_positions(const FilletData &fd, const float3 center = get_center(dst_spline.positions()[i_dst] - positions[i_src], fd, i_src); /* Calculate the vector of the radius formed by the first vertex. */ float3 radius_vec = dst_spline.positions()[i_dst] - center; - const float radius = radius_vec.normalize_and_get_length(); + float radius; + radius_vec = math::normalize_and_get_length(radius_vec, radius); dst_spline.handle_types_right().slice(1, count - 2).fill(BezierSpline::HandleType::Align); dst_spline.handle_types_left().slice(1, count - 2).fill(BezierSpline::HandleType::Align); diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc index a7fb493c7d7..7b5d1a1dc80 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc @@ -101,8 +101,8 @@ static void node_update(bNodeTree *ntree, bNode *node) static bool colinear_f3_f3_f3(const float3 p1, const float3 p2, const float3 p3) { - const float3 a = (p2 - p1).normalized(); - const float3 b = (p3 - p1).normalized(); + const float3 a = math::normalize(p2 - p1); + const float3 b = math::normalize(p3 - p1); return (ELEM(a, b, b * -1.0f)); } @@ -122,18 +122,18 @@ static std::unique_ptr<CurveEval> create_point_circle_curve( float3 center; /* Midpoints of `P1->P2` and `P2->P3`. */ - const float3 q1 = float3::interpolate(p1, p2, 0.5f); - const float3 q2 = float3::interpolate(p2, p3, 0.5f); + const float3 q1 = math::interpolate(p1, p2, 0.5f); + const float3 q2 = math::interpolate(p2, p3, 0.5f); /* Normal Vectors of `P1->P2` and `P2->P3` */ - const float3 v1 = (p2 - p1).normalized(); - const float3 v2 = (p3 - p2).normalized(); + const float3 v1 = math::normalize(p2 - p1); + const float3 v2 = math::normalize(p3 - p2); /* Normal of plane of main 2 segments P1->P2 and `P2->P3`. */ - const float3 v3 = float3::cross(v1, v2).normalized(); + const float3 v3 = math::normalize(math::cross(v1, v2)); /* Normal of plane of first perpendicular bisector and `P1->P2`. */ - const float3 v4 = float3::cross(v3, v1).normalized(); + const float3 v4 = math::normalize(math::cross(v3, v1)); /* Determine Center-point from the intersection of 3 planes. */ float plane_1[4], plane_2[4], plane_3[4]; @@ -148,7 +148,7 @@ static std::unique_ptr<CurveEval> create_point_circle_curve( } /* Get the radius from the center-point to p1. */ - const float r = float3::distance(p1, center); + const float r = math::distance(p1, center); const float theta_step = ((2 * M_PI) / (float)resolution); for (const int i : IndexRange(resolution)) { diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc index ff9218b1ac2..d35fa0a2fdc 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc @@ -100,7 +100,7 @@ static std::unique_ptr<CurveEval> create_direction_line_curve(const float3 start spline->resize(2); MutableSpan<float3> positions = spline->positions(); positions[0] = start; - positions[1] = direction.normalized() * length + start; + positions[1] = math::normalize(direction) * length + start; spline->radii().fill(1.0f); spline->tilts().fill(0.0f); diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc index 084d27e9d24..885d92a111b 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc @@ -58,9 +58,9 @@ static std::unique_ptr<CurveEval> create_quadratic_bezier_curve(const float3 p1, const float step = 1.0f / resolution; for (const int i : IndexRange(resolution + 1)) { const float factor = step * i; - const float3 q1 = float3::interpolate(p1, p2, factor); - const float3 q2 = float3::interpolate(p2, p3, factor); - positions[i] = float3::interpolate(q1, q2, factor); + const float3 q1 = math::interpolate(p1, p2, factor); + const float3 q2 = math::interpolate(p2, p3, factor); + positions[i] = math::interpolate(q1, q2, factor); } curve->add_spline(std::move(spline)); diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc index 038f7625825..56fbc50f033 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc @@ -185,7 +185,7 @@ class SampleCurveFunction : public fn::MultiFunction { for (const int i : mask) { const Spline::LookupResult &lookup = lookups[i]; const Span<float3> evaluated_tangents = splines[spline_indices[i]]->evaluated_tangents(); - sampled_tangents[i] = sample_with_lookup(lookup, evaluated_tangents).normalized(); + sampled_tangents[i] = math::normalize(sample_with_lookup(lookup, evaluated_tangents)); } } @@ -193,7 +193,7 @@ class SampleCurveFunction : public fn::MultiFunction { for (const int i : mask) { const Spline::LookupResult &lookup = lookups[i]; const Span<float3> evaluated_normals = splines[spline_indices[i]]->evaluated_normals(); - sampled_normals[i] = sample_with_lookup(lookup, evaluated_normals).normalized(); + sampled_normals[i] = math::normalize(sample_with_lookup(lookup, evaluated_normals)); } } } diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc index 40dde645756..257a5b8df00 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc @@ -96,7 +96,7 @@ static void calculate_nurbs_lengths(const NURBSpline &spline, MutableSpan<float> float length = 0.0f; for (const int i : IndexRange(positions.size() - 1)) { lengths[i] = length; - length += float3::distance(positions[i], positions[i + 1]); + length += math::distance(positions[i], positions[i + 1]); } lengths.last() = length; } diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc index a8553b636a4..19efd4b7508 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc @@ -285,7 +285,7 @@ static void copy_uniform_sample_point_attributes(const Span<SplinePtr> splines, spline.sample_with_index_factors<float3>( spline.evaluated_tangents(), uniform_samples, data.tangents.slice(offset, size)); for (float3 &tangent : data.tangents) { - tangent.normalize(); + tangent = math::normalize(tangent); } } @@ -293,7 +293,7 @@ static void copy_uniform_sample_point_attributes(const Span<SplinePtr> splines, spline.sample_with_index_factors<float3>( spline.evaluated_normals(), uniform_samples, data.normals.slice(offset, size)); for (float3 &normals : data.normals) { - normals.normalize(); + normals = math::normalize(normals); } } } diff --git a/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc b/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc index 28a8fb80294..624a8b6b0f6 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc @@ -21,7 +21,7 @@ #include "BKE_image.h" -#include "BLI_float4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_threads.h" #include "BLI_timeit.hh" diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc index e90a9eb393b..5b67258a947 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc @@ -155,7 +155,7 @@ static void calculate_polys(const CuboidConfig &config, /* Calculate polys for Bottom faces. */ int vert_1_start = 0; - for (const int UNUSED(y) : IndexRange(config.edges_y)) { + for ([[maybe_unused]] const int y : IndexRange(config.edges_y)) { for (const int x : IndexRange(config.edges_x)) { const int vert_1 = vert_1_start + x; const int vert_2 = vert_1_start + config.verts_x + x; @@ -173,7 +173,7 @@ static void calculate_polys(const CuboidConfig &config, vert_1_start = 0; int vert_2_start = config.verts_x * config.verts_y; - for (const int UNUSED(z) : IndexRange(config.edges_z)) { + for ([[maybe_unused]] const int z : IndexRange(config.edges_z)) { for (const int x : IndexRange(config.edges_x)) { define_quad(polys, loops, @@ -196,7 +196,7 @@ static void calculate_polys(const CuboidConfig &config, (config.verts_x - 2) * (config.verts_y - 2)); vert_2_start = vert_1_start + config.verts_x; - for (const int UNUSED(y) : IndexRange(config.edges_y)) { + for ([[maybe_unused]] const int y : IndexRange(config.edges_y)) { for (const int x : IndexRange(config.edges_x)) { define_quad(polys, loops, diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc index 607f5b52392..691267bccb8 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc @@ -155,8 +155,8 @@ static void node_geo_exec(GeoNodeExecParams params) if (count_mode == GEO_NODE_MESH_LINE_COUNT_RESOLUTION) { /* Don't allow asymptotic count increase for low resolution values. */ const float resolution = std::max(params.extract_input<float>("Resolution"), 0.0001f); - const int count = total_delta.length() / resolution + 1; - const float3 delta = total_delta.normalized() * resolution; + const int count = math::length(total_delta) / resolution + 1; + const float3 delta = math::normalize(total_delta) * resolution; mesh = create_line_mesh(start, delta, count); } else if (count_mode == GEO_NODE_MESH_LINE_COUNT_TOTAL) { diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc index d8d76b26157..751cf917f6f 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc @@ -183,7 +183,7 @@ static void calculate_sphere_faces(MutableSpan<MLoop> loops, int ring_vert_index_start = 1; int ring_edge_index_start = segments; - for (const int UNUSED(ring) : IndexRange(1, rings - 2)) { + for ([[maybe_unused]] const int ring : IndexRange(1, rings - 2)) { const int next_ring_vert_index_start = ring_vert_index_start + segments; const int next_ring_edge_index_start = ring_edge_index_start + segments * 2; const int ring_vertical_edge_index_start = ring_edge_index_start + segments; diff --git a/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc b/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc index dda4543d5e1..c165bcf8e35 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc @@ -166,7 +166,7 @@ static float compute_voxel_size(const GeoNodeExecParams ¶ms, } /* The voxel size adapts to the final size of the volume. */ - const float diagonal = float3::distance(min, max); + const float diagonal = math::distance(min, max); const float extended_diagonal = diagonal + 2.0f * radius; const float voxel_size = extended_diagonal / voxel_amount; return voxel_size; diff --git a/source/blender/nodes/geometry/nodes/node_geo_proximity.cc b/source/blender/nodes/geometry/nodes/node_geo_proximity.cc index e0117c4726d..772638ef240 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_proximity.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_proximity.cc @@ -85,7 +85,7 @@ static bool calculate_mesh_proximity(const VArray<float3> &positions, for (int i : range) { const int index = mask[i]; /* Use the distance to the last found point as upper bound to speedup the bvh lookup. */ - nearest.dist_sq = float3::distance_squared(nearest.co, positions[index]); + nearest.dist_sq = math::distance_squared(float3(nearest.co), positions[index]); BLI_bvhtree_find_nearest( bvh_data.tree, positions[index], &nearest, bvh_data.nearest_callback, &bvh_data); diff --git a/source/blender/nodes/geometry/nodes/node_geo_raycast.cc b/source/blender/nodes/geometry/nodes/node_geo_raycast.cc index 2c35ca0afc9..c38503f688c 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_raycast.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_raycast.cc @@ -163,7 +163,7 @@ static void raycast_to_mesh(IndexMask mask, for (const int i : mask) { const float ray_length = ray_lengths[i]; const float3 ray_origin = ray_origins[i]; - const float3 ray_direction = ray_directions[i].normalized(); + const float3 ray_direction = math::normalize(ray_directions[i]); BVHTreeRayHit hit; hit.index = -1; diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc b/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc index feab0a6743f..82d09bbc208 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc @@ -106,7 +106,7 @@ static void set_position_in_component(const GeometryNodeCurveHandleMode mode, } } else { - for (int UNUSED(i) : spline->positions().index_range()) { + for ([[maybe_unused]] int i : spline->positions().index_range()) { if (current_mask < selection.size() && selection[current_mask] == current_point) { current_mask++; } diff --git a/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc index 331460296a6..6867051ecfe 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc @@ -296,7 +296,7 @@ static void get_closest_mesh_corners(const Mesh &mesh, const MLoop &loop = mesh.mloop[loop_index]; const int vertex_index = loop.v; const MVert &mvert = mesh.mvert[vertex_index]; - const float distance_sq = float3::distance_squared(position, mvert.co); + const float distance_sq = math::distance_squared(position, float3(mvert.co)); if (distance_sq < min_distance_sq) { min_distance_sq = distance_sq; closest_loop_index = loop_index; diff --git a/source/blender/nodes/geometry/nodes/node_geo_transform.cc b/source/blender/nodes/geometry/nodes/node_geo_transform.cc index 7f866ea6f4a..6187a2eacf9 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_transform.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_transform.cc @@ -37,7 +37,7 @@ namespace blender::nodes { static bool use_translate(const float3 rotation, const float3 scale) { - if (compare_ff(rotation.length_squared(), 0.0f, 1e-9f) != 1) { + if (compare_ff(math::length_squared(rotation), 0.0f, 1e-9f) != 1) { return false; } if (compare_ff(scale.x, 1.0f, 1e-9f) != 1 || compare_ff(scale.y, 1.0f, 1e-9f) != 1 || @@ -49,7 +49,7 @@ static bool use_translate(const float3 rotation, const float3 scale) static void translate_mesh(Mesh &mesh, const float3 translation) { - if (!translation.is_zero()) { + if (!math::is_zero(translation)) { BKE_mesh_translate(&mesh, translation, false); } } diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc index 6a6b6e3d3cc..ed72580ccf1 100644 --- a/source/blender/nodes/intern/node_socket.cc +++ b/source/blender/nodes/intern/node_socket.cc @@ -26,8 +26,8 @@ #include "DNA_node_types.h" #include "BLI_color.hh" -#include "BLI_float3.hh" #include "BLI_listbase.h" +#include "BLI_math_vec_types.hh" #include "BLI_string.h" #include "BLI_utildefines.h" diff --git a/source/blender/nodes/shader/node_shader_util.hh b/source/blender/nodes/shader/node_shader_util.hh index 9d4d57d01dd..5a5b4f613f3 100644 --- a/source/blender/nodes/shader/node_shader_util.hh +++ b/source/blender/nodes/shader/node_shader_util.hh @@ -29,9 +29,9 @@ #include "BLI_blenlib.h" #include "BLI_color.hh" -#include "BLI_float3.hh" #include "BLI_math.h" #include "BLI_math_base_safe.h" +#include "BLI_math_vec_types.hh" #include "BLI_rand.h" #include "BLI_threads.h" #include "BLI_utildefines.h" diff --git a/source/blender/nodes/shader/nodes/node_shader_map_range.cc b/source/blender/nodes/shader/nodes/node_shader_map_range.cc index 3276a1bfd72..bc7ca661a77 100644 --- a/source/blender/nodes/shader/nodes/node_shader_map_range.cc +++ b/source/blender/nodes/shader/nodes/node_shader_map_range.cc @@ -272,7 +272,7 @@ class MapRangeVectorFunction : public blender::fn::MultiFunction { blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); for (int64_t i : mask) { - float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); + float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; } @@ -315,8 +315,8 @@ class MapRangeSteppedVectorFunction : public blender::fn::MultiFunction { blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(6, "Vector"); for (int64_t i : mask) { - float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); - factor = float3::safe_divide(float3::floor(factor * (steps[i] + 1.0f)), steps[i]); + float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); + factor = math::safe_divide(math::floor(factor * (steps[i] + 1.0f)), steps[i]); results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; } @@ -355,7 +355,7 @@ class MapRangeSmoothstepVectorFunction : public blender::fn::MultiFunction { blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); for (int64_t i : mask) { - float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); + float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); clamp_v3(factor, 0.0f, 1.0f); factor = (float3(3.0f) - 2.0f * factor) * (factor * factor); results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; @@ -390,7 +390,7 @@ class MapRangeSmootherstepVectorFunction : public blender::fn::MultiFunction { blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); for (int64_t i : mask) { - float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); + float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); clamp_v3(factor, 0.0f, 1.0f); factor = factor * factor * factor * (factor * (factor * 6.0f - 15.0f) + 10.0f); results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc b/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc index 61b1613c11a..81a69ef18da 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc @@ -19,8 +19,7 @@ #include "node_shader_util.hh" -#include "BLI_float2.hh" -#include "BLI_float4.hh" +#include "BLI_math_vec_types.hh" #include "UI_interface.h" #include "UI_resources.h" diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc index 85e0f262ca7..53be5bc09d9 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc @@ -130,7 +130,7 @@ class GradientFunction : public fn::MultiFunction { /* Bias a little bit for the case where input is a unit length vector, * to get exactly zero instead of a small random value depending * on float precision. */ - const float r = std::max(0.999999f - vector[i].length(), 0.0f); + const float r = std::max(0.999999f - math::length(vector[i]), 0.0f); fac[i] = r * r; } break; @@ -140,7 +140,7 @@ class GradientFunction : public fn::MultiFunction { /* Bias a little bit for the case where input is a unit length vector, * to get exactly zero instead of a small random value depending * on float precision. */ - fac[i] = std::max(0.999999f - vector[i].length(), 0.0f); + fac[i] = std::max(0.999999f - math::length(vector[i]), 0.0f); } break; } diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc b/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc index 0e549859a39..1c703313edf 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc @@ -176,14 +176,14 @@ class NoiseFunction : public fn::MultiFunction { const VArray<float3> &vector = params.readonly_single_input<float3>(0, "Vector"); if (compute_factor) { for (int64_t i : mask) { - const float2 position = vector[i] * scale[i]; + const float2 position = float2(vector[i] * scale[i]); r_factor[i] = noise::perlin_fractal_distorted( position, detail[i], roughness[i], distortion[i]); } } if (compute_color) { for (int64_t i : mask) { - const float2 position = vector[i] * scale[i]; + const float2 position = float2(vector[i] * scale[i]); const float3 c = noise::perlin_float3_fractal_distorted( position, detail[i], roughness[i], distortion[i]); r_color[i] = ColorGeometry4f(c[0], c[1], c[2], 1.0f); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc index 2b5c1ddfe21..209f96449cd 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc @@ -313,7 +313,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - pos = float2::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); r_position[i] = float3(pos.x, pos.y, 0.0f); } } @@ -345,7 +345,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - pos = float2::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); r_position[i] = float3(pos.x, pos.y, 0.0f); } } @@ -380,7 +380,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - pos = float2::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); r_position[i] = float3(pos.x, pos.y, 0.0f); } } @@ -416,7 +416,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - r_position[i] = float3::safe_divide(r_position[i], scale[i]); + r_position[i] = math::safe_divide(r_position[i], scale[i]); } } break; @@ -446,7 +446,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - r_position[i] = float3::safe_divide(r_position[i], scale[i]); + r_position[i] = math::safe_divide(r_position[i], scale[i]); } } break; @@ -479,7 +479,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - r_position[i] = float3::safe_divide(r_position[i], scale[i]); + r_position[i] = math::safe_divide(r_position[i], scale[i]); } } break; @@ -519,7 +519,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position || calc_w) { - pos = float4::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); if (calc_position) { r_position[i] = float3(pos.x, pos.y, pos.z); } @@ -560,7 +560,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position || calc_w) { - pos = float4::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); if (calc_position) { r_position[i] = float3(pos.x, pos.y, pos.z); } @@ -604,7 +604,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position || calc_w) { - pos = float4::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); if (calc_position) { r_position[i] = float3(pos.x, pos.y, pos.z); } @@ -837,7 +837,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - pos = float2::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); r_position[i] = float3(pos.x, pos.y, 0.0f); } } @@ -868,7 +868,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - pos = float2::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); r_position[i] = float3(pos.x, pos.y, 0.0f); } } @@ -902,7 +902,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - pos = float2::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); r_position[i] = float3(pos.x, pos.y, 0.0f); } } @@ -937,7 +937,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - r_position[i] = float3::safe_divide(r_position[i], scale[i]); + r_position[i] = math::safe_divide(r_position[i], scale[i]); } } break; @@ -966,7 +966,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - r_position[i] = float3::safe_divide(r_position[i], scale[i]); + r_position[i] = math::safe_divide(r_position[i], scale[i]); } } break; @@ -999,7 +999,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position) { - r_position[i] = float3::safe_divide(r_position[i], scale[i]); + r_position[i] = math::safe_divide(r_position[i], scale[i]); } } } @@ -1040,7 +1040,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position || calc_w) { - pos = float4::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); if (calc_position) { r_position[i] = float3(pos.x, pos.y, pos.z); } @@ -1080,7 +1080,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position || calc_w) { - pos = float4::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); if (calc_position) { r_position[i] = float3(pos.x, pos.y, pos.z); } @@ -1123,7 +1123,7 @@ class VoronoiMetricFunction : public fn::MultiFunction { r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f); } if (calc_position || calc_w) { - pos = float4::safe_divide(pos, scale[i]); + pos = math::safe_divide(pos, scale[i]); if (calc_position) { r_position[i] = float3(pos.x, pos.y, pos.z); } diff --git a/source/blender/python/generic/py_capi_utils.h b/source/blender/python/generic/py_capi_utils.h index 604792389fa..f08665d75e7 100644 --- a/source/blender/python/generic/py_capi_utils.h +++ b/source/blender/python/generic/py_capi_utils.h @@ -57,20 +57,20 @@ void PyC_Err_PrintWithFunc(PyObject *py_func); void PyC_FileAndNum(const char **r_filename, int *r_lineno); void PyC_FileAndNum_Safe(const char **r_filename, int *r_lineno); /* checks python is running */ int PyC_AsArray_FAST(void *array, - const size_t array_item_size, + size_t array_item_size, PyObject *value_fast, - const Py_ssize_t length, + Py_ssize_t length, const PyTypeObject *type, const char *error_prefix); int PyC_AsArray(void *array, - const size_t array_item_size, + size_t array_item_size, PyObject *value, - const Py_ssize_t length, + Py_ssize_t length, const PyTypeObject *type, const char *error_prefix); int PyC_AsArray_Multi_FAST(void *array, - const size_t array_item_size, + size_t array_item_size, PyObject *value_fast, const int *dims, int dims_len, @@ -78,7 +78,7 @@ int PyC_AsArray_Multi_FAST(void *array, const char *error_prefix); int PyC_AsArray_Multi(void *array, - const size_t array_item_size, + size_t array_item_size, PyObject *value, const int *dims, int dims_len, diff --git a/source/blender/render/RE_bake.h b/source/blender/render/RE_bake.h index 43d3b5b323c..b7ce3da71ff 100644 --- a/source/blender/render/RE_bake.h +++ b/source/blender/render/RE_bake.h @@ -96,7 +96,7 @@ bool RE_bake_pixels_populate_from_objects(struct Mesh *me_low, BakePixel pixel_array_to[], BakeHighPolyData highpoly[], int tot_highpoly, - const size_t num_pixels, + size_t num_pixels, bool is_custom_cage, float cage_extrusion, float max_ray_distance, @@ -106,16 +106,16 @@ bool RE_bake_pixels_populate_from_objects(struct Mesh *me_low, void RE_bake_pixels_populate(struct Mesh *me, struct BakePixel *pixel_array, - const size_t num_pixels, + size_t num_pixels, const struct BakeTargets *targets, const char *uv_layer); -void RE_bake_mask_fill(const BakePixel pixel_array[], const size_t num_pixels, char *mask); +void RE_bake_mask_fill(const BakePixel pixel_array[], size_t num_pixels, char *mask); void RE_bake_margin(struct ImBuf *ibuf, char *mask, int margin); void RE_bake_normal_world_to_object(const BakePixel pixel_array[], - const size_t num_pixels, + size_t num_pixels, int depth, float result[], struct Object *ob, @@ -125,14 +125,14 @@ void RE_bake_normal_world_to_object(const BakePixel pixel_array[], * to a tangent space normal map for a given low poly mesh. */ void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[], - const size_t num_pixels, + size_t num_pixels, int depth, float result[], struct Mesh *me, const eBakeNormalSwizzle normal_swizzle[3], float mat[4][4]); void RE_bake_normal_world_to_world(const BakePixel pixel_array[], - const size_t num_pixels, + size_t num_pixels, int depth, float result[], const eBakeNormalSwizzle normal_swizzle[3]); diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c index 8776bc63cf0..a35e83a8632 100644 --- a/source/blender/sequencer/intern/effects.c +++ b/source/blender/sequencer/intern/effects.c @@ -3344,12 +3344,12 @@ static ImBuf *do_text_effect(const SeqRenderData *context, fonty = line_height; BLF_position(font, x + max_ii(fontx / 55, 1), y - max_ii(fonty / 30, 1), 0.0f); BLF_buffer_col(font, data->shadow_color); - BLF_draw_buffer(font, data->text, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(font, data->text, sizeof(data->text)); } BLF_position(font, x, y, 0.0f); BLF_buffer_col(font, data->color); - BLF_draw_buffer(font, data->text, BLF_DRAW_STR_DUMMY_MAX); + BLF_draw_buffer(font, data->text, sizeof(data->text)); BLF_buffer(font, NULL, NULL, 0, 0, 0, NULL); diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c index 9f4e07820fa..482425e70d3 100644 --- a/source/blender/sequencer/intern/render.c +++ b/source/blender/sequencer/intern/render.c @@ -29,6 +29,7 @@ #include "MEM_guardedalloc.h" #include "DNA_anim_types.h" +#include "DNA_defaults.h" #include "DNA_mask_types.h" #include "DNA_scene_types.h" #include "DNA_sequence_types.h" @@ -1188,15 +1189,13 @@ static ImBuf *seq_render_movieclip_strip(const SeqRenderData *context, bool *r_is_proxy_image) { ImBuf *ibuf = NULL; - MovieClipUser user; + MovieClipUser user = *DNA_struct_default_get(MovieClipUser); IMB_Proxy_Size psize = SEQ_rendersize_to_proxysize(context->preview_render_size); if (!seq->clip) { return NULL; } - memset(&user, 0, sizeof(MovieClipUser)); - BKE_movieclip_user_set_frame(&user, frame_index + seq->anim_startofs + seq->clip->start_frame); user.render_size = MCLIP_PROXY_RENDER_SIZE_FULL; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 9a8a6a3a3ac..2e305c0bf3c 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -607,7 +607,7 @@ int WM_operator_confirm_message_ex(struct bContext *C, const char *title, int icon, const char *message, - const wmOperatorCallContext opcontext); + wmOperatorCallContext opcontext); int WM_operator_confirm_message(struct bContext *C, struct wmOperator *op, const char *message); /* Operator API. */ diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 99bab3ae23d..344f4959a93 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -193,7 +193,6 @@ bool wm_file_or_session_data_has_unsaved_changes(const Main *bmain, const wmWind static void wm_window_match_init(bContext *C, ListBase *wmlist) { *wmlist = G_MAIN->wm; - BLI_listbase_clear(&G_MAIN->wm); wmWindow *active_win = CTX_wm_window(C); @@ -220,6 +219,8 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist) } } + BLI_listbase_clear(&G_MAIN->wm); + /* reset active window */ CTX_wm_window_set(C, active_win); diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 29c9f53f735..a1854a8ed86 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -1033,7 +1033,9 @@ void wm_window_make_drawable(wmWindowManager *wm, wmWindow *win) } wm_window_set_drawable(wm, win, true); + } + if (win->ghostwin) { /* this can change per window */ WM_window_set_dpi(win); } |