Merge with trunk r37677
authorJoerg Mueller <nexyon@gmail.com>
Mon, 20 Jun 2011 22:55:18 +0000 (22:55 +0000)
committerJoerg Mueller <nexyon@gmail.com>
Mon, 20 Jun 2011 22:55:18 +0000 (22:55 +0000)
150 files changed:
CMakeLists.txt
build_files/cmake/FindPythonLibsUnix.cmake [deleted file]
build_files/cmake/Modules/FindFftw3.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindJack.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindJeMalloc.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindOpenEXR.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindOpenJPEG.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindPythonLibsUnix.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindSamplerate.cmake [new file with mode: 0644]
build_files/cmake/Modules/FindSndFile.cmake [new file with mode: 0644]
build_files/cmake/macros.cmake
build_files/scons/config/win32-vc-config.py
build_files/scons/config/win64-vc-config.py
doc/python_api/blender-org/layout.html
doc/python_api/examples/bpy.props.4.py [new file with mode: 0644]
extern/libopenjpeg/CMakeLists.txt
intern/audaspace/CMakeLists.txt
intern/smoke/CMakeLists.txt
release/scripts/modules/bpy_extras/mesh_utils.py
release/scripts/modules/bpy_extras/view3d_utils.py
release/scripts/modules/bpy_types.py
release/scripts/modules/rna_prop_ui.py
release/scripts/startup/bl_operators/nla.py
release/scripts/startup/bl_operators/object_quick_effects.py
release/scripts/startup/bl_ui/properties_data_curve.py
release/scripts/startup/bl_ui/properties_data_metaball.py
release/scripts/startup/bl_ui/space_info.py
release/scripts/startup/bl_ui/space_userpref.py
release/scripts/startup/bl_ui/space_view3d.py
release/text/readme.html
source/blender/blenkernel/BKE_action.h
source/blender/blenkernel/BKE_displist.h
source/blender/blenkernel/CMakeLists.txt
source/blender/blenkernel/depsgraph_private.h
source/blender/blenkernel/intern/action.c
source/blender/blenkernel/intern/anim.c
source/blender/blenkernel/intern/armature.c
source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/constraint.c
source/blender/blenkernel/intern/depsgraph.c
source/blender/blenkernel/intern/displist.c
source/blender/blenkernel/intern/node.c
source/blender/blenkernel/intern/object.c
source/blender/blenlib/CMakeLists.txt
source/blender/blenloader/intern/readfile.c
source/blender/blenpluginapi/CMakeLists.txt
source/blender/blenpluginapi/iff.h
source/blender/collada/AnimationImporter.cpp
source/blender/collada/ArmatureImporter.cpp
source/blender/collada/CMakeLists.txt
source/blender/collada/DocumentImporter.cpp
source/blender/collada/DocumentImporter.h
source/blender/collada/LightExporter.cpp
source/blender/collada/MeshImporter.cpp
source/blender/collada/SkinInfo.cpp
source/blender/collada/collada_internal.cpp
source/blender/editors/datafiles/startup.blend.c
source/blender/editors/include/UI_interface.h
source/blender/editors/interface/interface.c
source/blender/editors/interface/interface_layout.c
source/blender/editors/interface/interface_regions.c
source/blender/editors/interface/interface_templates.c
source/blender/editors/interface/resources.c
source/blender/editors/interface/view2d.c
source/blender/editors/mesh/mesh_data.c
source/blender/editors/object/object_add.c
source/blender/editors/object/object_bake.c
source/blender/editors/object/object_relations.c
source/blender/editors/render/CMakeLists.txt
source/blender/editors/space_buttons/buttons_intern.h
source/blender/editors/space_buttons/buttons_ops.c
source/blender/editors/space_buttons/space_buttons.c
source/blender/editors/space_console/console_ops.c
source/blender/editors/space_file/file_draw.c
source/blender/editors/space_file/file_ops.c
source/blender/editors/space_file/filelist.c
source/blender/editors/space_file/filesel.c
source/blender/editors/space_node/node_draw.c
source/blender/editors/space_node/node_edit.c
source/blender/editors/space_node/node_intern.h
source/blender/editors/space_node/space_node.c
source/blender/editors/space_outliner/outliner.c
source/blender/editors/space_sequencer/sequencer_add.c
source/blender/editors/space_view3d/drawanimviz.c
source/blender/editors/space_view3d/drawarmature.c
source/blender/editors/space_view3d/drawobject.c
source/blender/editors/space_view3d/view3d_draw.c
source/blender/editors/space_view3d/view3d_intern.h
source/blender/editors/transform/transform.h
source/blender/editors/transform/transform_conversions.c
source/blender/editors/transform/transform_generics.c
source/blender/editors/transform/transform_snap.c
source/blender/editors/uvedit/uvedit_unwrap_ops.c
source/blender/gpu/GPU_draw.h
source/blender/gpu/intern/gpu_draw.c
source/blender/gpu/intern/gpu_material.c
source/blender/imbuf/CMakeLists.txt
source/blender/imbuf/IMB_imbuf.h
source/blender/imbuf/intern/openexr/CMakeLists.txt
source/blender/imbuf/intern/openexr/openexr_api.cpp
source/blender/imbuf/intern/rectop.c
source/blender/imbuf/intern/util.c
source/blender/makesdna/DNA_object_types.h
source/blender/makesdna/DNA_scene_types.h
source/blender/makesdna/DNA_space_types.h
source/blender/makesdna/DNA_userdef_types.h
source/blender/makesdna/intern/makesdna.c
source/blender/makesrna/RNA_access.h
source/blender/makesrna/intern/CMakeLists.txt
source/blender/makesrna/intern/rna_access.c
source/blender/makesrna/intern/rna_scene.c
source/blender/makesrna/intern/rna_userdef.c
source/blender/modifiers/intern/MOD_explode.c
source/blender/nodes/intern/SHD_nodes/SHD_material.c
source/blender/python/generic/IDProp.c
source/blender/python/generic/IDProp.h
source/blender/python/generic/py_capi_utils.c
source/blender/python/generic/py_capi_utils.h
source/blender/python/intern/CMakeLists.txt
source/blender/python/intern/bpy_interface.c
source/blender/python/intern/bpy_intern_string.c [new file with mode: 0644]
source/blender/python/intern/bpy_intern_string.h [new file with mode: 0644]
source/blender/python/intern/bpy_props.c
source/blender/python/intern/bpy_rna.c
source/blender/python/intern/bpy_rna_array.c
source/blender/python/intern/bpy_util.c
source/blender/quicktime/CMakeLists.txt
source/blender/render/CMakeLists.txt
source/blender/render/extern/include/RE_shader_ext.h
source/blender/render/intern/include/rayobject.h
source/blender/render/intern/source/convertblender.c
source/blender/render/intern/source/pipeline.c
source/blender/render/intern/source/rayshade.c
source/blender/render/intern/source/render_texture.c
source/blender/render/intern/source/rendercore.c
source/blender/render/intern/source/renderdatabase.c
source/blender/render/intern/source/shadeinput.c
source/blender/render/intern/source/shadeoutput.c
source/blender/render/intern/source/strand.c
source/blender/render/intern/source/zbuf.c
source/blender/windowmanager/CMakeLists.txt
source/blender/windowmanager/intern/wm_init_exit.c
source/blender/windowmanager/intern/wm_operators.c
source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
source/creator/CMakeLists.txt
source/gameengine/Converter/BL_ActionActuator.cpp
source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
source/gameengine/Ketsji/BL_Texture.cpp
source/gameengine/Ketsji/KX_Camera.cpp
source/gameengine/VideoTexture/CMakeLists.txt

index 2c27076..52773a4 100644 (file)
@@ -49,8 +49,13 @@ endif()
 
 cmake_minimum_required(VERSION 2.8)
 
+if(NOT EXECUTABLE_OUTPUT_PATH)
+       set(FIRST_RUN "TRUE")
+endif()
+
+
 # this starts out unset
-set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/")
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
 
 # quiet output for Makefiles, 'make -s' helps too
 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
@@ -246,13 +251,12 @@ set(CXX_WARNINGS "")
 # On Unix: 
 #   cmake ../blender \
 #         -D PYTHON_VERSION=3.2 \
-#         -D PYTHON_INCLUDE_DIRS=/opt/py32/include/python3.2d \
-#         -D PYTHON_LIBPATH=/opt/py32/lib \
-#         -D PYTHON_LIBRARY=python3.2d
+#         -D PYTHON_INCLUDE_DIR=/opt/py32/include/python3.2d \
+#         -D PYTHON_LIBRARY=/opt/py32/lib/libpython3.2d.so
 #
 # On Macs: 
 #   cmake ../blender \
-#         -D PYTHON_INCLUDE_DIRS=/System/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2 \
+#         -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2 \
 #         -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/config \
 #         -G Xcode
 #
@@ -268,65 +272,48 @@ if(UNIX AND NOT APPLE)
                set(CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu;${CMAKE_LIBRARY_PATH}")
        endif()
 
-       if(WITH_OPENAL)
-               find_package(OpenAL)
-               if(NOT OPENAL_FOUND)
-                       set(WITH_OPENAL OFF)
-               endif()
-       endif()
+       find_package(JPEG REQUIRED)
+       find_package(PNG REQUIRED)
+       find_package(ZLIB REQUIRED)
+       find_package(Freetype REQUIRED)
 
-       if(WITH_JACK)
-               set(JACK /usr)
-               set(JACK_INC ${JACK}/include/jack)
-               set(JACK_LIB jack)
-               set(JACK_LIBPATH ${JACK}/lib)
-       endif()
+       if(WITH_PYTHON)
+               # No way to set py32. remove for now.
+               # find_package(PythonLibs)
 
-       if(WITH_CODEC_SNDFILE)
-               set(SNDFILE /usr)
-               set(SNDFILE_INC ${SNDFILE}/include)
-               set(SNDFILE_LIB sndfile)
-               set(SNDFILE_LIBPATH ${SNDFILE}/lib)
+               # Use our own instead, since wothout py is such a rare case,
+               # require this package
+               find_package(PythonLibsUnix REQUIRED)
        endif()
 
-       if(WITH_INTERNATIONAL)
-               find_library(INTL_LIBRARY
-                       NAMES intl
-                       PATHS
-                       /sw/lib
-               )
-
-               find_library(ICONV_LIBRARY
-                       NAMES iconv
-                       PATHS
-                       /sw/lib
-               )
-               mark_as_advanced(ICONV_LIBRARY)
-               mark_as_advanced(INTL_LIBRARY)
 
-               if(INTL_LIBRARY AND ICONV_LIBRARY)
-                       set(GETTEXT_LIB ${INTL_LIBRARY} ${ICONV_LIBRARY})
+       if(WITH_IMAGE_OPENEXR)
+               find_package(OpenEXR)  # our own module
+               if(NOT OPENEXR_FOUND)
+                       set(WITH_IMAGE_OPENEXR OFF)
                endif()
        endif()
 
-       find_package(Freetype)
-       # unset(FREETYPE_INCLUDE_DIRS CACHE) # cant use
-
-
-       if(WITH_PYTHON)
-               # No way to set py32. remove for now.
-               # find_package(PythonLibs)
-
-               # defines...
-               
-               #  PYTHON_VERSION
-               #  PYTHON_INCLUDE_DIRS
-               #  PYTHON_LIBRARY
-               #  PYTHON_LIBPATH
-               #  PYTHON_LINKFLAGS
+       if(WITH_IMAGE_OPENJPEG)
+               find_package(OpenJPEG)
+               if(NOT OPENJPEG_FOUND)
+                       set(WITH_IMAGE_OPENJPEG OFF)
+               endif()
+       endif()
 
-               include(build_files/cmake/FindPythonLibsUnix.cmake)
+       if(WITH_IMAGE_TIFF)
+               find_package(TIFF)
+               if(NOT TIFF_FOUND)
+                       set(WITH_IMAGE_TIFF OFF)
+               endif()
+       endif()
 
+       # Audio IO
+       if(WITH_OPENAL)
+               find_package(OpenAL)
+               if(NOT OPENAL_FOUND)
+                       set(WITH_OPENAL OFF)
+               endif()
        endif()
 
        if(WITH_SDL)
@@ -341,71 +328,71 @@ if(UNIX AND NOT APPLE)
                endif()
        endif()
 
-       if(WITH_IMAGE_OPENEXR)
-               set(OPENEXR /usr CACHE FILEPATH "OPENEXR Directory")
-               mark_as_advanced(OPENEXR)
-               find_path(OPENEXR_INC
-                       ImfXdr.h
-                       PATHS
-                       ${OPENEXR}/include/OpenEXR
-                       /usr/local/include/OpenEXR
-                       /sw/include/OpenEXR
-                       /opt/local/include/OpenEXR
-                       /opt/csw/include/OpenEXR
-                       /opt/include/OpenEXR
-               )
-               mark_as_advanced(OPENEXR_INC)
-
-               set(OPENEXR_LIB Half IlmImf Iex Imath)
-               
-               if(NOT OPENEXR_INC)
-                       set(WITH_IMAGE_OPENEXR OFF)
+       if(WITH_JACK)
+               find_package(Jack)
+               if(NOT JACK_FOUND)
+                       set(WITH_JACK OFF)
                endif()
        endif()
 
-       if(WITH_IMAGE_TIFF)
-               find_package(TIFF)
-               if(NOT TIFF_FOUND)
-                       set(WITH_IMAGE_TIFF OFF)
+       # Codecs
+       if(WITH_CODEC_SNDFILE)
+               find_package(SndFile)
+               if(NOT SNDFILE_FOUND)
+                       set(WITH_CODEC_SNDFILE OFF)
                endif()
        endif()
 
-       find_package(JPEG REQUIRED)
-
-       find_package(PNG REQUIRED)
-
-       find_package(ZLIB REQUIRED)
-
        if(WITH_CODEC_FFMPEG)
                set(FFMPEG /usr CACHE FILEPATH "FFMPEG Directory")
                mark_as_advanced(FFMPEG)
-               set(FFMPEG_INC ${FFMPEG}/include)
-               set(FFMPEG_LIB avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
-               mark_as_advanced(FFMPEG_LIB)
+               set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
+               set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
+               mark_as_advanced(FFMPEG_LIBRARIES)
                set(FFMPEG_LIBPATH ${FFMPEG}/lib)
                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
        endif()
 
+       if(WITH_INTERNATIONAL)
+               find_library(INTL_LIBRARY
+                       NAMES intl
+                       PATHS
+                       /sw/lib
+               )
+
+               find_library(ICONV_LIBRARY
+                       NAMES iconv
+                       PATHS
+                       /sw/lib
+               )
+               mark_as_advanced(ICONV_LIBRARY)
+               mark_as_advanced(INTL_LIBRARY)
+
+               if(INTL_LIBRARY AND ICONV_LIBRARY)
+                       set(GETTEXT_LIB ${INTL_LIBRARY} ${ICONV_LIBRARY})
+               endif()
+       endif()
+
        if(WITH_FFTW3)
-               set(FFTW3 /usr)
-               set(FFTW3_INC ${FFTW3}/include)
-               set(FFTW3_LIB fftw3)
-               set(FFTW3_LIBPATH ${FFTW3}/lib)
+               find_package(Fftw3)
+               if(NOT FFTW3_FOUND)
+                       set(WITH_FFTW3 OFF)
+               endif()
        endif()
 
        if(WITH_SAMPLERATE)
-               set(LIBSAMPLERATE /usr)
-               set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
-               set(LIBSAMPLERATE_LIB samplerate)
-               set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
+               find_package(Samplerate)
+               if(NOT SAMPLERATE_FOUND)
+                       set(WITH_SAMPLERATE OFF)
+               endif()
        endif()
 
        if(WITH_OPENCOLLADA)
                set(OPENCOLLADA /usr/local/opencollada CACHE FILEPATH "OpenCollada Directory")
                mark_as_advanced(OPENCOLLADA)
                set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
-               set(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2)
-               set(OPENCOLLADA_INC ${OPENCOLLADA})
+               set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2)
+               set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA})
 
                set(PCRE /usr CACHE FILEPATH "PCRE Directory")
                mark_as_advanced(PCRE)
@@ -419,12 +406,10 @@ if(UNIX AND NOT APPLE)
        endif()
 
        if(WITH_MEM_JEMALLOC)
-               set(JEMALLOC /usr)
-               set(JEMALLOC_LIBRARY jemalloc CACHE STRING "JeMalloc library")
-               set(JEMALLOC_LIBPATH ${JEMALLOC}/lib  CACHE FILEPATH "JeMalloc library path")
-               # no use for this yet.
-               # set(JEMALLOC_INCLUDE_DIR ${JEMALLOC}/include  CACHE FILEPATH "JeMalloc include path")
-               unset(JEMALLOC)
+               find_package(JeMalloc)
+               if(NOT JEMALLOC_FOUND)
+                       set(WITH_MEM_JEMALLOC OFF)
+               endif()
        endif()
 
        # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
@@ -446,10 +431,8 @@ if(UNIX AND NOT APPLE)
                if(NOT WITH_PYTHON_MODULE)
                        # BSD's dont use libdl.so
                        list(APPEND LLIBS -ldl)
-
                        # binreloc is linux only
-                       set(BINRELOC ${CMAKE_SOURCE_DIR}/extern/binreloc)
-                       set(BINRELOC_INC ${BINRELOC}/include)
+                       set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
                        set(WITH_BINRELOC ON)
                endif()
        endif()
@@ -502,16 +485,16 @@ elseif(WIN32)
 
        if(WITH_INTERNATIONAL)
                set(ICONV ${LIBDIR}/iconv)
-               set(ICONV_INC ${ICONV}/include)
-               set(ICONV_LIB iconv)
+               set(ICONV_INCLUDE_DIRS ${ICONV}/include)
+               set(ICONV_LIBRARIES iconv)
                set(ICONV_LIBPATH ${ICONV}/lib)
        endif()
 
        if(WITH_SAMPLERATE)
-               set(LIBSAMPLERATE ${LIBDIR}/samplerate)
-               set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
-               set(LIBSAMPLERATE_LIB libsamplerate)
-               set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
+               set(SAMPLERATE ${LIBDIR}/samplerate)
+               set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE}/include)
+               set(SAMPLERATE_LIBRARIES libsamplerate)
+               set(SAMPLERATE_LIBPATH ${SAMPLERATE}/lib)
        endif()
 
        set(PNG "${LIBDIR}/png")
@@ -533,9 +516,9 @@ elseif(WIN32)
 
        if(WITH_CODEC_SNDFILE)
                set(SNDFILE ${LIBDIR}/sndfile)
-               set(SNDFILE_INC ${SNDFILE}/include)
-               set(SNDFILE_LIB libsndfile-1)
-               set(SNDFILE_LIBPATH ${SNDFILE}/lib)
+               set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
+               set(SNDFILE_LIBRARIES libsndfile-1)
+               set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
        endif()
 
        if(WITH_SDL)
@@ -547,8 +530,8 @@ elseif(WIN32)
 
        if(WITH_CODEC_QUICKTIME)
                set(QUICKTIME ${LIBDIR}/QTDevWin)
-               set(QUICKTIME_INC ${QUICKTIME}/CIncludes)
-               set(QUICKTIME_LIB qtmlClient)
+               set(QUICKTIME_INCLUDE_DIRS ${QUICKTIME}/CIncludes)
+               set(QUICKTIME_LIBRARIES qtmlClient)
                set(QUICKTIME_LIBPATH ${QUICKTIME}/Libraries)
        endif()
 
@@ -611,9 +594,9 @@ elseif(WIN32)
                endif()
 
                set(PTHREADS ${LIBDIR}/pthreads)
-               set(PTHREADS_INC ${PTHREADS}/include)
+               set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
                set(PTHREADS_LIBPATH ${PTHREADS}/lib)
-               set(PTHREADS_LIB pthreadVC2)
+               set(PTHREADS_LIBRARIES pthreadVC2)
                
                set(FREETYPE ${LIBDIR}/freetype)
                set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
@@ -622,31 +605,41 @@ elseif(WIN32)
 
                if(WITH_FFTW3)
                        set(FFTW3 ${LIBDIR}/fftw3)
-                       set(FFTW3_LIB libfftw)
-                       set(FFTW3_INC ${FFTW3}/include)
+                       set(FFTW3_LIBRARIES libfftw)
+                       set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
                        set(FFTW3_LIBPATH ${FFTW3}/lib)
                endif()
 
                if(WITH_OPENCOLLADA)
-                       set(OPENCOLLADA ${LIBDIR}/opencollada)
-                       set(OPENCOLLADA_INC ${OPENCOLLADA}/include)
-                       set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
-                       set(OPENCOLLADA_LIB OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils OpenCOLLADAStreamWriter MathMLSolver GeneratedSaxParser xml2 buffer ftoa UTF)
-                       set(PCRE_LIB pcre)
+                       set(OPENCOLLADA_INCLUDE_DIR
+                               ${LIBDIR}/opencollada/include
+                       )
+                       set(OPENCOLLADA_LIBRARIES
+                               ${LIBDIR}/opencollada/lib/OpenCOLLADASaxFrameworkLoader.lib
+                               ${LIBDIR}/opencollada/lib/OpenCOLLADAFramework.lib
+                               ${LIBDIR}/opencollada/lib/OpenCOLLADABaseUtils.lib
+                               ${LIBDIR}/opencollada/lib/OpenCOLLADAStreamWriter.lib
+                               ${LIBDIR}/opencollada/lib/MathMLSolver.lib
+                               ${LIBDIR}/opencollada/lib/GeneratedSaxParser.lib
+                               ${LIBDIR}/opencollada/lib/xml2.lib
+                               ${LIBDIR}/opencollada/lib/buffer.lib
+                               ${LIBDIR}/opencollada/lib/ftoa.lib
+                               ${LIBDIR}/opencollada/lib/UTF.lib
+                       )
+                       set(PCRE_LIB
+                               ${LIBDIR}/opencollada/lib/pcre.lib
+                       )
                endif()
-       
+
                if(WITH_CODEC_FFMPEG)
                        set(FFMPEG ${LIBDIR}/ffmpeg)
-                       set(FFMPEG_INC ${FFMPEG}/include ${FFMPEG}/include/msvc)
-                       set(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
+                       set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include ${FFMPEG}/include/msvc)
+                       set(FFMPEG_LIBRARIES avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
                        set(FFMPEG_LIBPATH ${FFMPEG}/lib)
                endif()
 
                if(WITH_IMAGE_OPENEXR)
-                       if(MSVC80)
-                               set(MSVC_LIB _vs2005)
-                               set(MSVC_INC)
-                       elseif(MSVC90)
+                       if(MSVC90)
                                set(MSVC_LIB _vs2008)
                                set(MSVC_INC)
                        elseif(MSVC10)
@@ -656,11 +649,24 @@ elseif(WIN32)
                                set(MSVC_LIB msvc)
                                set(MSVC_INC)
                        endif()
-                       set(OPENEXR ${LIBDIR}/openexr)                  
-                       set(OPENEXR_LIB Iex Half IlmImf Imath IlmThread)
+                       set(OPENEXR ${LIBDIR}/openexr)
                        set(OPENEXR_LIBPATH ${OPENEXR}/lib${MSVC_LIB})
+                       set(OPENEXR_LIBRARIES
+                               ${OPENEXR_LIBPATH}/Iex.lib
+                               ${OPENEXR_LIBPATH}/Half.lib
+                               ${OPENEXR_LIBPATH}/IlmImf.lib
+                               ${OPENEXR_LIBPATH}/Imath.lib
+                               ${OPENEXR_LIBPATH}/IlmThread.lib
+                       )
                        set(OPENEXR_INCUDE ${OPENEXR}/include${MSVC_INC})
-                       set(OPENEXR_INC ${OPENEXR_INCUDE}/ ${OPENEXR_INCUDE}/IlmImf ${OPENEXR_INCUDE}/Iex ${OPENEXR_INCUDE}/Imath)
+                       set(OPENEXR_INCLUDE_DIRS
+                               ${OPENEXR_INCUDE}
+                               ${OPENEXR_INCUDE}/IlmImf
+                               ${OPENEXR_INCUDE}/Iex
+                               ${OPENEXR_INCUDE}/Imath
+                       )
+                       unset(OPENEXR_INCUDE)
+                       unset(OPENEXR_LIBPATH)
                endif()
 
                if(WITH_IMAGE_TIFF)
@@ -672,18 +678,16 @@ elseif(WIN32)
 
                if(WITH_JACK)
                        set(JACK ${LIBDIR}/jack)
-                       set(JACK_INC ${JACK}/include/jack ${JACK}/include)
-                       set(JACK_LIB libjack)
+                       set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
+                       set(JACK_LIBRARIES libjack)
                        set(JACK_LIBPATH ${JACK}/lib)
                endif()
 
                if(WITH_PYTHON)
-                       set(PYTHON ${LIBDIR}/python)
                        set(PYTHON_VERSION 3.2)
-                       set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}")
+                       set(PYTHON_INCLUDE_DIRS "${LIBDIR}/python/include/python${PYTHON_VERSION}")
                        # set(PYTHON_BINARY python) # not used yet
-                       set(PYTHON_LIBRARY python32)
-                       set(PYTHON_LIBPATH ${PYTHON}/lib)
+                       set(PYTHON_LIBRARIES ${LIBDIR}/python/lib/python32.lib)
                endif()
 
                # MSVC only, Mingw doesnt need
@@ -726,9 +730,9 @@ elseif(WIN32)
                set(ZLIB_LIBRARIES z)
 
                set(PTHREADS ${LIBDIR}/pthreads)
-               set(PTHREADS_INC ${PTHREADS}/include)
+               set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
                set(PTHREADS_LIBPATH ${PTHREADS}/lib)
-               set(PTHREADS_LIB pthreadGC2)
+               set(PTHREADS_LIBRARIES pthreadGC2)
                
                set(FREETYPE ${LIBDIR}/gcc/freetype)
                set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
@@ -737,30 +741,30 @@ elseif(WIN32)
 
                if(WITH_FFTW3)
                        set(FFTW3 ${LIBDIR}/gcc/fftw3)
-                       set(FFTW3_LIB fftw3)
-                       set(FFTW3_INC ${FFTW3}/include)
+                       set(FFTW3_LIBRARIES fftw3)
+                       set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
                        set(FFTW3_LIBPATH ${FFTW3}/lib)
                endif()
 
                if(WITH_OPENCOLLADA)
                        set(OPENCOLLADA ${LIBDIR}/gcc/opencollada)
-                       set(OPENCOLLADA_INC ${OPENCOLLADA}/include)
+                       set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}/include)
                        set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib ${OPENCOLLADA}/lib)
-                       set(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
+                       set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
                        set(PCRE_LIB pcre)
                endif()
                
                if(WITH_CODEC_FFMPEG)
                        set(FFMPEG ${LIBDIR}/ffmpeg)
-                       set(FFMPEG_INC ${FFMPEG}/include ${FFMPEG}/include)
-                       set(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
+                       set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include ${FFMPEG}/include)
+                       set(FFMPEG_LIBRARIES avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
                        set(FFMPEG_LIBPATH ${FFMPEG}/lib)
                endif()
 
                if(WITH_IMAGE_OPENEXR)
                        set(OPENEXR ${LIBDIR}/gcc/openexr)
-                       set(OPENEXR_INC ${OPENEXR}/include ${OPENEXR}/include/OpenEXR)
-                       set(OPENEXR_LIB Half IlmImf Imath IlmThread)
+                       set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
+                       set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread)
                        set(OPENEXR_LIBPATH ${OPENEXR}/lib)
 
                        # TODO, gives linking errors, force off
@@ -776,8 +780,8 @@ elseif(WIN32)
 
                if(WITH_JACK)
                        set(JACK ${LIBDIR}/jack)
-                       set(JACK_INC ${JACK}/include/jack ${JACK}/include)
-                       set(JACK_LIB jack)
+                       set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
+                       set(JACK_LIBRARIES jack)
                        set(JACK_LIBPATH ${JACK}/lib)
                        
                        # TODO, gives linking errors, force off
@@ -789,7 +793,7 @@ elseif(WIN32)
                        set(PYTHON_VERSION 3.2)
                        set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}")
                        # set(PYTHON_BINARY python) # not used yet
-                       set(PYTHON_LIBRARY python32mw)
+                       set(PYTHON_LIBRARIES python32mw)
                        set(PYTHON_LIBPATH ${PYTHON}/lib)
                endif()
 
@@ -798,7 +802,7 @@ elseif(WIN32)
        endif()
 
        # used in many places so include globally, like OpenGL
-       blender_include_dirs("${PTHREADS_INC}")
+       blender_include_dirs("${PTHREADS_INCLUDE_DIRS}")
 
 elseif(APPLE)
 
@@ -829,16 +833,16 @@ elseif(APPLE)
 
        if(WITH_JACK)
                set(JACK /usr)
-               set(JACK_INC ${JACK}/include/jack)
-               set(JACK_LIB jack)
+               set(JACK_INCLUDE_DIRS ${JACK}/include/jack)
+               set(JACK_LIBRARIES jack)
                set(JACK_LIBPATH ${JACK}/lib)
        endif()
 
        if(WITH_CODEC_SNDFILE)
                set(SNDFILE ${LIBDIR}/sndfile)
-               set(SNDFILE_INC ${SNDFILE}/include)
-               set(SNDFILE_LIB sndfile FLAC ogg vorbis vorbisenc)
-               set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)
+               set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
+               set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
+               set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)  # TODO, deprecate
        endif()
 
        set(PYTHON_VERSION 3.2)
@@ -849,7 +853,7 @@ elseif(APPLE)
                set(PYTHON ${LIBDIR}/python)
                set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}")
                # set(PYTHON_BINARY "${PYTHON}/bin/python${PYTHON_VERSION}") # not used yet
-               set(PYTHON_LIBRARY python${PYTHON_VERSION})
+               set(PYTHON_LIBRARIES python${PYTHON_VERSION})
                set(PYTHON_LIBPATH "${PYTHON}/lib/python${PYTHON_VERSION}")
                # set(PYTHON_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
        else()
@@ -859,7 +863,7 @@ elseif(APPLE)
                set(PYTHON_VERSION 3.2)
                set(PYTHON_INCLUDE_DIRS "${PYTHON}${PYTHON_VERSION}/include/python${PYTHON_VERSION}")
                # set(PYTHON_BINARY ${PYTHON}${PYTHON_VERSION}/bin/python${PYTHON_VERSION}) # not used yet
-               set(PYTHON_LIBRARY "")
+               set(PYTHON_LIBRARIES "")
                set(PYTHON_LIBPATH ${PYTHON}${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config)
                set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework System -framework Python")
        endif()
@@ -873,8 +877,8 @@ elseif(APPLE)
 
        if(WITH_FFTW3)
                set(FFTW3 ${LIBDIR}/fftw3)
-               set(FFTW3_INC ${FFTW3}/include)
-               set(FFTW3_LIB fftw3)
+               set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
+               set(FFTW3_LIBRARIES fftw3)
                set(FFTW3_LIBPATH ${FFTW3}/lib)
        endif()
 
@@ -892,24 +896,24 @@ elseif(APPLE)
 
        if(WITH_IMAGE_OPENEXR)
                set(OPENEXR ${LIBDIR}/openexr)
-               set(OPENEXR_INC ${OPENEXR}/include/OpenEXR ${OPENEXR}/include)
-               set(OPENEXR_LIB Iex Half IlmImf Imath IlmThread)
+               set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
+               set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
                set(OPENEXR_LIBPATH ${OPENEXR}/lib)
        endif()
 
        if(WITH_CODEC_FFMPEG)
                set(FFMPEG ${LIBDIR}/ffmpeg)
-               set(FFMPEG_INC ${FFMPEG}/include)
-               set(FFMPEG_LIB avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
+               set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
+               set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
                set(FFMPEG_LIBPATH ${FFMPEG}/lib)
                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
        endif()
 
        if(WITH_SAMPLERATE)
-               set(LIBSAMPLERATE ${LIBDIR}/samplerate)
-               set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
-               set(LIBSAMPLERATE_LIB samplerate)
-               set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
+               set(SAMPLERATE ${LIBDIR}/samplerate)
+               set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE}/include)
+               set(SAMPLERATE_LIBRARIES samplerate)
+               set(SAMPLERATE_LIBPATH ${SAMPLERATE}/lib)
        endif()
 
        set(LLIBS stdc++ SystemStubs)
@@ -934,9 +938,9 @@ elseif(APPLE)
 
        if(WITH_OPENCOLLADA)
                set(OPENCOLLADA ${LIBDIR}/opencollada)
-               set(OPENCOLLADA_INC ${OPENCOLLADA}/include)
+               set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}/include)
                set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
-               set(OPENCOLLADA_LIB "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa" )
+               set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa" )
                #pcre is bundled with openCollada
                #set(PCRE ${LIBDIR}/pcre)
                #set(PCRE_LIBPATH ${PCRE}/lib)
@@ -1012,13 +1016,9 @@ endif()
 
 if(WITH_IMAGE_OPENJPEG)
        if(UNIX AND NOT APPLE)
-               set(OPENJPEG /usr)
-               set(OPENJPEG_INC ${OPENJPEG}/include)
-               set(OPENJPEG_LIB openjpeg)
-               set(OPENJPEG_LIBPATH ${OPENJPEG}/lib)
+               # dealt with above
        else()
-               set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg)
-               set(OPENJPEG_INC ${OPENJPEG})
+               set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
        endif()
 endif()
 
@@ -1188,3 +1188,83 @@ endif()
 #-----------------------------------------------------------------------------
 # CPack for generating packages
 include(build_files/cmake/packaging.cmake)
+
+
+#-----------------------------------------------------------------------------
+# Print Final Configuration
+
+if(FIRST_RUN)
+       set(_config_msg "\n* Blender Configuration *")
+       macro(info_cfg_option
+               _setting)
+               set(_msg "   * ${_setting}")
+               string(LENGTH "${_msg}" _len)
+               while("28" GREATER "${_len}")
+                       set(_msg "${_msg} ")
+                        math(EXPR _len "${_len} + 1")
+               endwhile()
+
+               set(_config_msg "${_config_msg}\n${_msg}${${_setting}}")
+       endmacro()
+
+       macro(info_cfg_text
+               _text)
+               set(_config_msg "${_config_msg}\n\n  ${_text}")
+               
+               
+       endmacro()
+
+       info_cfg_text("Build Options:")
+       info_cfg_option(WITH_GAMEENGINE)
+       info_cfg_option(WITH_PLAYER)
+       info_cfg_option(WITH_BULLET)
+       info_cfg_option(WITH_IK_ITASC)
+       info_cfg_option(WITH_OPENCOLLADA)
+       info_cfg_option(WITH_FFTW3)
+       info_cfg_option(WITH_INTERNATIONAL)
+
+       info_cfg_text("Compiler Options:")
+       info_cfg_option(WITH_BUILDINFO)
+       info_cfg_option(WITH_OPENMP)
+       info_cfg_option(WITH_RAYOPTIMIZATION)
+
+       info_cfg_text("System Options:")
+       info_cfg_option(WITH_INSTALL_PORTABLE)
+       info_cfg_option(WITH_X11_XINPUT)
+       info_cfg_option(WITH_BUILTIN_GLEW)
+
+       info_cfg_text("Image Formats:")
+       info_cfg_option(WITH_IMAGE_CINEON)
+       info_cfg_option(WITH_IMAGE_DDS)
+       info_cfg_option(WITH_IMAGE_HDR)
+       info_cfg_option(WITH_IMAGE_OPENEXR)
+       info_cfg_option(WITH_IMAGE_OPENJPEG)
+       info_cfg_option(WITH_IMAGE_REDCODE)
+       info_cfg_option(WITH_IMAGE_TIFF)
+
+       info_cfg_text("Audio:")
+       info_cfg_option(WITH_OPENAL)
+       info_cfg_option(WITH_SDL)
+       info_cfg_option(WITH_JACK)
+       info_cfg_option(WITH_CODEC_FFMPEG)
+       info_cfg_option(WITH_CODEC_SNDFILE)
+       info_cfg_option(WITH_SAMPLERATE)
+
+       info_cfg_text("Compression:")
+       info_cfg_option(WITH_LZMA)
+       info_cfg_option(WITH_LZO)
+
+       info_cfg_text("Python:")
+       info_cfg_option(WITH_PYTHON_INSTALL)
+       info_cfg_option(WITH_PYTHON_MODULE)
+       info_cfg_option(WITH_PYTHON_SAFETY)
+
+       info_cfg_text("Modifiers:")
+       info_cfg_option(WITH_MOD_BOOLEAN)
+       info_cfg_option(WITH_MOD_DECIMATE)
+       info_cfg_option(WITH_MOD_FLUID)
+
+       info_cfg_text("")
+
+       message("${_config_msg}")
+endif()
diff --git a/build_files/cmake/FindPythonLibsUnix.cmake b/build_files/cmake/FindPythonLibsUnix.cmake
deleted file mode 100644 (file)
index 90bd79a..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-# - Find python libraries
-#
-#  PYTHON_VERSION
-#  PYTHON_INCLUDE_DIRS
-#  PYTHON_LIBRARY
-#  PYTHON_LIBPATH
-#  PYTHON_LINKFLAGS
-
-#=============================================================================
-
-set(PYTHON_VERSION 3.2 CACHE STRING "")
-mark_as_advanced(PYTHON_VERSION)
-
-set(PYTHON_LINKFLAGS "-Xlinker -export-dynamic")
-mark_as_advanced(PYTHON_LINKFLAGS)
-
-set(_Python_ABI_FLAGS
-       "m;mu;u; ")
-
-string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
-
-set(_Python_PATHS
-       "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
-       "/opt/py${_PYTHON_VERSION_NO_DOTS}"
-       "/usr"
-       "/usr/local"
-)
-
-if(NOT DEFINED PYTHON_INCLUDE_DIRS OR
-   NOT DEFINED PYTHON_LIBRARY OR
-   NOT DEFINED PYTHON_LIBPATH)
-   
-       message(STATUS "Looking for include Python.h")
-       set(_Found_PYTHON_H OFF)
-
-       foreach(_CURRENT_PATH ${_Python_PATHS})
-               foreach(_CURRENT_ABI_FLAGS ${_Python_ABI_FLAGS})
-                       if(CMAKE_BUILD_TYPE STREQUAL Debug)
-                               set(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}")
-                       endif()
-                       string(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
-
-                       set(_Python_HEADER "${_CURRENT_PATH}/include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}/Python.h")
-
-                       if(EXISTS ${_Python_HEADER})
-                               message(STATUS "Checking for header: ${_Python_HEADER} - found")
-                               set(_Found_PYTHON_H ON)
-                               set(PYTHON ${_CURRENT_PATH})
-                               set(PYTHON_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
-                               break()
-                       else()
-                               message(STATUS "Checking for header: ${_Python_HEADER}")
-                       endif()
-               endforeach()
-               
-               if(_Found_PYTHON_H)
-                       break()
-               endif()
-       endforeach()
-
-       if(NOT _Found_PYTHON_H)
-               message(FATAL_ERROR "Python.h not found")
-       endif()
-       
-       unset(_Found_PYTHON_H)
-       unset(_Python_HEADER)
-       unset(_CURRENT_ABI_FLAGS)
-       unset(_CURRENT_PATH)
-
-
-       set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "")
-       mark_as_advanced(PYTHON_INCLUDE_DIRS)
-       set(PYTHON_LIBRARY "python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "")
-       mark_as_advanced(PYTHON_LIBRARY)
-       set(PYTHON_LIBPATH ${PYTHON}/lib CACHE STRING "")
-       mark_as_advanced(PYTHON_LIBPATH)
-       # set(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
-endif()
-
-unset(_Python_ABI_FLAGS)
-unset(_Python_PATHS)
-
-#=============================================================================
-# now the python versions are found
-
-
-if(NOT EXISTS "${PYTHON_INCLUDE_DIRS}/Python.h")
-       message(FATAL_ERROR " Missing python header: ${PYTHON_INCLUDE_DIRS}/Python.h")
-endif()
diff --git a/build_files/cmake/Modules/FindFftw3.cmake b/build_files/cmake/Modules/FindFftw3.cmake
new file mode 100644 (file)
index 0000000..197d4aa
--- /dev/null
@@ -0,0 +1,70 @@
+# - Find Fftw3 library
+# Find the native Fftw3 includes and library
+# This module defines
+#  FFTW3_INCLUDE_DIRS, where to find fftw3.h, Set when
+#                        FFTW3_INCLUDE_DIR is found.
+#  FFTW3_LIBRARIES, libraries to link against to use Fftw3.
+#  FFTW3_ROOT_DIR, The base directory to search for Fftw3.
+#                    This can also be an environment variable.
+#  FFTW3_FOUND, If false, do not try to use Fftw3.
+#
+# also defined, but not for general use are
+#  FFTW3_LIBRARY, where to find the Fftw3 library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If FFTW3_ROOT_DIR was defined in the environment, use it.
+IF(NOT FFTW3_ROOT_DIR AND NOT $ENV{FFTW3_ROOT_DIR} STREQUAL "")
+  SET(FFTW3_ROOT_DIR $ENV{FFTW3_ROOT_DIR})
+ENDIF()
+
+SET(_fftw3_SEARCH_DIRS
+  ${FFTW3_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(FFTW3_INCLUDE_DIR
+  NAMES
+    fftw3.h
+  HINTS
+    ${_fftw3_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+FIND_LIBRARY(FFTW3_LIBRARY
+  NAMES
+    fftw3
+  HINTS
+    ${_fftw3_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Fftw3 DEFAULT_MSG
+    FFTW3_LIBRARY FFTW3_INCLUDE_DIR)
+
+IF(FFTW3_FOUND)
+  SET(FFTW3_LIBRARIES ${FFTW3_LIBRARY})
+  SET(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR})
+ENDIF(FFTW3_FOUND)
+
+MARK_AS_ADVANCED(
+  FFTW3_INCLUDE_DIR
+  FFTW3_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindJack.cmake b/build_files/cmake/Modules/FindJack.cmake
new file mode 100644 (file)
index 0000000..9a847fa
--- /dev/null
@@ -0,0 +1,70 @@
+# - Find Jack library
+# Find the native Jack includes and library
+# This module defines
+#  JACK_INCLUDE_DIRS, where to find jack.h, Set when
+#                        JACK_INCLUDE_DIR is found.
+#  JACK_LIBRARIES, libraries to link against to use Jack.
+#  JACK_ROOT_DIR, The base directory to search for Jack.
+#                    This can also be an environment variable.
+#  JACK_FOUND, If false, do not try to use Jack.
+#
+# also defined, but not for general use are
+#  JACK_LIBRARY, where to find the Jack library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If JACK_ROOT_DIR was defined in the environment, use it.
+IF(NOT JACK_ROOT_DIR AND NOT $ENV{JACK_ROOT_DIR} STREQUAL "")
+  SET(JACK_ROOT_DIR $ENV{JACK_ROOT_DIR})
+ENDIF()
+
+SET(_jack_SEARCH_DIRS
+  ${JACK_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(JACK_INCLUDE_DIR
+  NAMES
+    jack.h
+  HINTS
+    ${_jack_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include/jack
+)
+
+FIND_LIBRARY(JACK_LIBRARY
+  NAMES
+    jack
+  HINTS
+    ${_jack_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# handle the QUIETLY and REQUIRED arguments and set JACK_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jack DEFAULT_MSG
+    JACK_LIBRARY JACK_INCLUDE_DIR)
+
+IF(JACK_FOUND)
+  SET(JACK_LIBRARIES ${JACK_LIBRARY})
+  SET(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR})
+ENDIF(JACK_FOUND)
+
+MARK_AS_ADVANCED(
+  JACK_INCLUDE_DIR
+  JACK_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindJeMalloc.cmake b/build_files/cmake/Modules/FindJeMalloc.cmake
new file mode 100644 (file)
index 0000000..5c7aa2c
--- /dev/null
@@ -0,0 +1,70 @@
+# - Find JeMalloc library
+# Find the native JeMalloc includes and library
+# This module defines
+#  JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when
+#                        JEMALLOC_INCLUDE_DIR is found.
+#  JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc.
+#  JEMALLOC_ROOT_DIR, The base directory to search for JeMalloc.
+#                    This can also be an environment variable.
+#  JEMALLOC_FOUND, If false, do not try to use JeMalloc.
+#
+# also defined, but not for general use are
+#  JEMALLOC_LIBRARY, where to find the JeMalloc library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If JEMALLOC_ROOT_DIR was defined in the environment, use it.
+IF(NOT JEMALLOC_ROOT_DIR AND NOT $ENV{JEMALLOC_ROOT_DIR} STREQUAL "")
+  SET(JEMALLOC_ROOT_DIR $ENV{JEMALLOC_ROOT_DIR})
+ENDIF()
+
+SET(_jemalloc_SEARCH_DIRS
+  ${JEMALLOC_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(JEMALLOC_INCLUDE_DIR
+  NAMES
+    jemalloc.h
+  HINTS
+    ${_jemalloc_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include/jemalloc
+)
+
+FIND_LIBRARY(JEMALLOC_LIBRARY
+  NAMES
+    jemalloc
+  HINTS
+    ${_jemalloc_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG
+    JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
+
+IF(JEMALLOC_FOUND)
+  SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
+  SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
+ENDIF(JEMALLOC_FOUND)
+
+MARK_AS_ADVANCED(
+  JEMALLOC_INCLUDE_DIR
+  JEMALLOC_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindOpenEXR.cmake b/build_files/cmake/Modules/FindOpenEXR.cmake
new file mode 100644 (file)
index 0000000..546f690
--- /dev/null
@@ -0,0 +1,92 @@
+# - Find OpenEXR library
+# Find the native OpenEXR includes and library
+# This module defines
+#  OPENEXR_INCLUDE_DIRS, where to find ImfXdr.h, etc. Set when
+#                        OPENEXR_INCLUDE_DIR is found.
+#  OPENEXR_LIBRARIES, libraries to link against to use OpenEXR.
+#  OPENEXR_ROOT_DIR, The base directory to search for OpenEXR.
+#                    This can also be an environment variable.
+#  OPENEXR_FOUND, If false, do not try to use OpenEXR.
+#
+# For indervidual library access these advanced settings are available
+#  OPENEXR_HALF_LIBRARY, Path to Half library
+#  OPENEXR_IEX_LIBRARY, Path to Half library
+#  OPENEXR_ILMIMF_LIBRARY, Path to Ilmimf library
+#  OPENEXR_ILMTHREAD_LIBRARY, Path to IlmThread library
+#  OPENEXR_IMATH_LIBRARY, Path to Imath library
+#
+# also defined, but not for general use are
+#  OPENEXR_LIBRARY, where to find the OpenEXR library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If OPENEXR_ROOT_DIR was defined in the environment, use it.
+IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "")
+  SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR})
+ENDIF()
+
+SET(_openexr_FIND_COMPONENTS
+  Half
+  Iex
+  IlmImf
+  IlmThread
+  Imath
+)
+
+SET(_openexr_SEARCH_DIRS
+  ${OPENEXR_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(OPENEXR_INCLUDE_DIR
+  NAMES
+    ImfXdr.h
+  HINTS
+    ${_openexr_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include/OpenEXR
+)
+
+SET(_openexr_LIBRARIES)
+FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
+  STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+
+  FIND_LIBRARY(OPENEXR_${UPPERCOMPONENT}_LIBRARY
+    NAMES
+      ${COMPONENT}
+    HINTS
+      ${_openexr_SEARCH_DIRS}
+    PATH_SUFFIXES
+      lib64 lib
+    )
+  LIST(APPEND _openexr_LIBRARIES "${OPENEXR_${UPPERCOMPONENT}_LIBRARY}")
+ENDFOREACH()
+
+# handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR  DEFAULT_MSG
+    _openexr_LIBRARIES OPENEXR_INCLUDE_DIR)
+
+IF(OPENEXR_FOUND)
+  SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES})
+  SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR})
+ENDIF()
+
+MARK_AS_ADVANCED(OPENEXR_INCLUDE_DIR)
+FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
+  STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+  MARK_AS_ADVANCED(OPENEXR_${UPPERCOMPONENT}_LIBRARY)
+ENDFOREACH()
diff --git a/build_files/cmake/Modules/FindOpenJPEG.cmake b/build_files/cmake/Modules/FindOpenJPEG.cmake
new file mode 100644 (file)
index 0000000..8d901ed
--- /dev/null
@@ -0,0 +1,70 @@
+# - Find OpenJPEG library
+# Find the native OpenJPEG includes and library
+# This module defines
+#  OPENJPEG_INCLUDE_DIRS, where to find openjpeg.h, Set when
+#                        OPENJPEG_INCLUDE_DIR is found.
+#  OPENJPEG_LIBRARIES, libraries to link against to use OpenJPEG.
+#  OPENJPEG_ROOT_DIR, The base directory to search for OpenJPEG.
+#                    This can also be an environment variable.
+#  OPENJPEG_FOUND, If false, do not try to use OpenJPEG.
+#
+# also defined, but not for general use are
+#  OPENJPEG_LIBRARY, where to find the OpenJPEG library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If OPENJPEG_ROOT_DIR was defined in the environment, use it.
+IF(NOT OPENJPEG_ROOT_DIR AND NOT $ENV{OPENJPEG_ROOT_DIR} STREQUAL "")
+  SET(OPENJPEG_ROOT_DIR $ENV{OPENJPEG_ROOT_DIR})
+ENDIF()
+
+SET(_openjpeg_SEARCH_DIRS
+  ${OPENJPEG_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(OPENJPEG_INCLUDE_DIR
+  NAMES
+    openjpeg.h
+  HINTS
+    ${_openjpeg_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+FIND_LIBRARY(OPENJPEG_LIBRARY
+  NAMES
+    openjpeg
+  HINTS
+    ${_openjpeg_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# handle the QUIETLY and REQUIRED arguments and set OPENJPEG_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenJPEG DEFAULT_MSG
+    OPENJPEG_LIBRARY OPENJPEG_INCLUDE_DIR)
+
+IF(OPENJPEG_FOUND)
+  SET(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY})
+  SET(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR})
+ENDIF(OPENJPEG_FOUND)
+
+MARK_AS_ADVANCED(
+  OPENJPEG_INCLUDE_DIR
+  OPENJPEG_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindPythonLibsUnix.cmake b/build_files/cmake/Modules/FindPythonLibsUnix.cmake
new file mode 100644 (file)
index 0000000..882f1e2
--- /dev/null
@@ -0,0 +1,121 @@
+# - Find Python libraries
+# Find the native Python includes and library
+#
+# Note:, This is not _yet_ intended to be a general python module for other
+#  projects to use since its hard coded to python 3.2 as blender only supports
+#  a single python version.
+#  This is for blender/unix python only.
+#
+# This module defines
+#  PYTHON_VERSION
+#  PYTHON_INCLUDE_DIRS
+#  PYTHON_LIBRARIES
+#  PYTHON_LIBPATH, Used for installation
+#  PYTHON_LINKFLAGS
+#  PYTHON_ROOT_DIR, The base directory to search for Python.
+#                   This can also be an environment variable.
+#
+# also defined, but not for general use are
+#  PYTHON_LIBRARY, where to find the python library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If PYTHON_ROOT_DIR was defined in the environment, use it.
+IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "")
+  SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR})
+ENDIF()
+
+IF(DEFINED PYTHON_VERSION)
+  SET(PYTHON_VERSION "${PYTHON_VERSION}" CACHE STRING "")
+ELSE()
+  SET(PYTHON_VERSION 3.2 CACHE STRING "")
+ENDIF()
+MARK_AS_ADVANCED(PYTHON_VERSION)
+
+SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic")
+MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
+
+SET(_python_ABI_FLAGS
+  "m;mu;u; "  # release
+  "md;mud;ud;d" # debug
+)
+
+STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
+
+SET(_python_SEARCH_DIRS
+  ${PYTHON_ROOT_DIR}
+  "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
+  "/opt/py${_PYTHON_VERSION_NO_DOTS}"
+)
+
+FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS})
+  #IF(CMAKE_BUILD_TYPE STREQUAL Debug)
+  #  SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}")
+  #ENDIF()
+  STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
+
+  FIND_PATH(PYTHON_INCLUDE_DIR
+    NAMES
+      Python.h
+    HINTS
+      ${_python_SEARCH_DIRS}
+    PATH_SUFFIXES
+      include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
+  )
+
+  FIND_LIBRARY(PYTHON_LIBRARY
+    NAMES
+      "python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}"
+    HINTS
+      ${_python_SEARCH_DIRS}
+    PATH_SUFFIXES
+      lib64 lib
+  )
+
+  IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
+    break()
+  ELSE()
+    # ensure we dont find values from 2 different ABI versions
+    UNSET(PYTHON_INCLUDE_DIR CACHE)
+    UNSET(PYTHON_LIBRARY CACHE)
+  ENDIF()
+ENDFOREACH()
+
+UNSET(_CURRENT_ABI_FLAGS)
+UNSET(_CURRENT_PATH)
+
+UNSET(_python_ABI_FLAGS)
+UNSET(_python_SEARCH_DIRS)
+
+# handle the QUIETLY and REQUIRED arguments and SET PYTHONLIBSUNIX_FOUND to TRUE IF 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibsUnix  DEFAULT_MSG
+    PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
+
+
+IF(PYTHONLIBSUNIX_FOUND)
+  # Assign cache items
+  SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR})
+  SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
+
+  # we need this for installation
+  GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
+
+  # not used
+  # SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
+
+  MARK_AS_ADVANCED(
+    PYTHON_INCLUDE_DIR
+    PYTHON_LIBRARY
+  )
+ENDIF()
diff --git a/build_files/cmake/Modules/FindSamplerate.cmake b/build_files/cmake/Modules/FindSamplerate.cmake
new file mode 100644 (file)
index 0000000..ea7a0d7
--- /dev/null
@@ -0,0 +1,70 @@
+# - Find Samplerate library
+# Find the native Samplerate includes and library
+# This module defines
+#  SAMPLERATE_INCLUDE_DIRS, where to find samplerate.h, Set when
+#                        SAMPLERATE_INCLUDE_DIR is found.
+#  SAMPLERATE_LIBRARIES, libraries to link against to use Samplerate.
+#  SAMPLERATE_ROOT_DIR, The base directory to search for Samplerate.
+#                    This can also be an environment variable.
+#  SAMPLERATE_FOUND, If false, do not try to use Samplerate.
+#
+# also defined, but not for general use are
+#  SAMPLERATE_LIBRARY, where to find the Samplerate library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If SAMPLERATE_ROOT_DIR was defined in the environment, use it.
+IF(NOT SAMPLERATE_ROOT_DIR AND NOT $ENV{SAMPLERATE_ROOT_DIR} STREQUAL "")
+  SET(SAMPLERATE_ROOT_DIR $ENV{SAMPLERATE_ROOT_DIR})
+ENDIF()
+
+SET(_samplerate_SEARCH_DIRS
+  ${SAMPLERATE_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(SAMPLERATE_INCLUDE_DIR
+  NAMES
+    samplerate.h
+  HINTS
+    ${_samplerate_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+FIND_LIBRARY(SAMPLERATE_LIBRARY
+  NAMES
+    samplerate
+  HINTS
+    ${_samplerate_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# handle the QUIETLY and REQUIRED arguments and set SAMPLERATE_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Samplerate DEFAULT_MSG
+    SAMPLERATE_LIBRARY SAMPLERATE_INCLUDE_DIR)
+
+IF(SAMPLERATE_FOUND)
+  SET(SAMPLERATE_LIBRARIES ${SAMPLERATE_LIBRARY})
+  SET(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE_INCLUDE_DIR})
+ENDIF(SAMPLERATE_FOUND)
+
+MARK_AS_ADVANCED(
+  SAMPLERATE_INCLUDE_DIR
+  SAMPLERATE_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindSndFile.cmake b/build_files/cmake/Modules/FindSndFile.cmake
new file mode 100644 (file)
index 0000000..1b685ea
--- /dev/null
@@ -0,0 +1,68 @@
+# - Find SndFile library
+# Find the native SndFile includes and library
+# This module defines
+#  SNDFILE_INCLUDE_DIRS, where to find sndfile.h, Set when
+#                        SNDFILE_INCLUDE_DIR is found.
+#  SNDFILE_LIBRARIES, libraries to link against to use SndFile.
+#  SNDFILE_ROOT_DIR, The base directory to search for SndFile.
+#                    This can also be an environment variable.
+#  SNDFILE_FOUND, If false, do not try to use SndFile.
+#
+# also defined, but not for general use are
+#  SNDFILE_LIBRARY, where to find the SndFile library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If SNDFILE_ROOT_DIR was defined in the environment, use it.
+IF(NOT SNDFILE_ROOT_DIR AND NOT $ENV{SNDFILE_ROOT_DIR} STREQUAL "")
+  SET(SNDFILE_ROOT_DIR $ENV{SNDFILE_ROOT_DIR})
+ENDIF()
+
+SET(_sndfile_SEARCH_DIRS
+  ${SNDFILE_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(SNDFILE_INCLUDE_DIR sndfile.h
+  HINTS
+    ${_sndfile_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+FIND_LIBRARY(SNDFILE_LIBRARY
+  NAMES
+    sndfile
+  HINTS
+    ${_sndfile_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# handle the QUIETLY and REQUIRED arguments and set SNDFILE_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SndFile DEFAULT_MSG
+    SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR)
+
+IF(SNDFILE_FOUND)
+  SET(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY})
+  SET(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR})
+ENDIF(SNDFILE_FOUND)
+
+MARK_AS_ADVANCED(
+  SNDFILE_INCLUDE_DIR
+  SNDFILE_LIBRARY
+)
index 8189769..bb3761d 100644 (file)
@@ -1,6 +1,44 @@
 # -*- mode: cmake; indent-tabs-mode: t; -*-
 # $Id$
 
+
+# foo_bar.spam --> foo_barMySuffix.spam
+macro(file_suffix
+       file_name_new file_name file_suffix
+       )
+
+       get_filename_component(_file_name_PATH ${file_name} PATH)
+       get_filename_component(_file_name_NAME_WE ${file_name} NAME_WE)
+       get_filename_component(_file_name_EXT ${file_name} EXT)
+       set(${file_name_new} "${_file_name_PATH}/${_file_name_NAME_WE}${file_suffix}${_file_name_EXT}")
+
+       unset(_file_name_PATH)
+       unset(_file_name_NAME_WE)
+       unset(_file_name_EXT)
+endmacro()
+
+# usefil for adding debug suffix to library lists:
+# /somepath/foo.lib --> /somepath/foo_d.lib
+macro(file_list_suffix
+       fp_list_new fp_list fn_suffix
+       )
+
+       # incase of empty list
+       set(_fp)
+       set(_fp_suffixed)
+
+       set(fp_list_new)
+
+       foreach(_fp ${fp_list})
+               file_suffix(_fp_suffixed "${_fp}" "${fn_suffix}")
+               list(APPEND "${fp_list_new}" "${_fp_suffixed}")
+       endforeach()
+
+       unset(_fp)
+       unset(_fp_suffixed)
+
+endmacro()
+
 # Nicer makefiles with -I/1/foo/ instead of -I/1/2/3/../../foo/
 # use it instead of include_directories()
 macro(blender_include_dirs
@@ -37,7 +75,7 @@ macro(blender_source_group
 
        foreach(_SRC ${sources})
                get_filename_component(_SRC_EXT ${_SRC} EXT)
-               if(${_SRC_EXT} MATCHES ".h" OR ${_SRC_EXT} MATCHES ".hpp")
+               if((${_SRC_EXT} MATCHES ".h") OR (${_SRC_EXT} MATCHES ".hpp"))
                        source_group("Header Files" FILES ${_SRC})
                else()
                        source_group("Source Files" FILES ${_SRC})
@@ -127,7 +165,7 @@ macro(SETUP_LIBDIRS)
                link_directories(${SNDFILE_LIBPATH})
        endif()
        if(WITH_SAMPLERATE)
-               link_directories(${LIBSAMPLERATE_LIBPATH})
+               link_directories(${SAMPLERATE_LIBPATH})
        endif()
        if(WITH_FFTW3)
                link_directories(${FFTW3_LIBPATH})
@@ -150,17 +188,26 @@ macro(setup_liblinks
        target)
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS} ")
 
-       target_link_libraries(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${LLIBS})
+       target_link_libraries(${target}
+                       ${OPENGL_gl_LIBRARY}
+                       ${OPENGL_glu_LIBRARY}
+                       ${JPEG_LIBRARIES}
+                       ${PNG_LIBRARIES}
+                       ${ZLIB_LIBRARIES}
+                       ${LLIBS})
 
        # since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions
        if(WITH_PYTHON)  # AND NOT WITH_PYTHON_MODULE  # WIN32 needs
                target_link_libraries(${target} ${PYTHON_LINKFLAGS})
 
                if(WIN32 AND NOT UNIX)
-                       target_link_libraries(${target} debug ${PYTHON_LIBRARY}_d)
-                       target_link_libraries(${target} optimized ${PYTHON_LIBRARY})
+                       file_list_suffix(PYTHON_LIBRARIES_DEBUG "${PYTHON_LIBRARIES}" "_d")
+                       target_link_libraries(${target}
+                                       debug ${PYTHON_LIBRARIES_DEBUG}
+                                       optimized ${PYTHON_LIBRARIES})
+                       unset(PYTHON_LIBRARIES_DEBUG)
                else()
-                       target_link_libraries(${target} ${PYTHON_LIBRARY})
+                       target_link_libraries(${target} ${PYTHON_LIBRARIES})
                endif()
        endif()
 
@@ -168,14 +215,18 @@ macro(setup_liblinks
                target_link_libraries(${target} ${GLEW_LIBRARY})
        endif()
 
-       target_link_libraries(${target} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES})
-       target_link_libraries(${target} ${FREETYPE_LIBRARY})
+       target_link_libraries(${target}
+                       ${OPENGL_glu_LIBRARY}
+                       ${JPEG_LIBRARIES}
+                       ${PNG_LIBRARIES}
+                       ${ZLIB_LIBRARIES}
+                       ${FREETYPE_LIBRARY})
 
        if(WITH_INTERNATIONAL)
                target_link_libraries(${target} ${GETTEXT_LIB})
 
                if(WIN32 AND NOT UNIX)
-                       target_link_libraries(${target} ${ICONV_LIB})
+                       target_link_libraries(${target} ${ICONV_LIBRARIES})
                endif()
        endif()
 
@@ -183,67 +234,76 @@ macro(setup_liblinks
                target_link_libraries(${target} ${OPENAL_LIBRARY})
        endif()
        if(WITH_FFTW3)
-               target_link_libraries(${target} ${FFTW3_LIB})
+               target_link_libraries(${target} ${FFTW3_LIBRARIES})
        endif()
        if(WITH_JACK)
-               target_link_libraries(${target} ${JACK_LIB})
+               target_link_libraries(${target} ${JACK_LIBRARIES})
        endif()
        if(WITH_CODEC_SNDFILE)
-               target_link_libraries(${target} ${SNDFILE_LIB})
+               target_link_libraries(${target} ${SNDFILE_LIBRARIES})
        endif()
        if(WITH_SAMPLERATE)
-               target_link_libraries(${target} ${LIBSAMPLERATE_LIB})
+               target_link_libraries(${target} ${SAMPLERATE_LIBRARIES})
        endif()
        if(WITH_SDL)
                target_link_libraries(${target} ${SDL_LIBRARY})
        endif()
        if(WITH_CODEC_QUICKTIME)
-               target_link_libraries(${target} ${QUICKTIME_LIB})
+               target_link_libraries(${target} ${QUICKTIME_LIBRARIES})
        endif()
        if(WITH_IMAGE_TIFF)
                target_link_libraries(${target} ${TIFF_LIBRARY})
        endif()
        if(WITH_IMAGE_OPENEXR)
                if(WIN32 AND NOT UNIX)
-                       foreach(_LOOP_VAR ${OPENEXR_LIB})
-                               target_link_libraries(${target} debug ${_LOOP_VAR}_d)
-                               target_link_libraries(${target} optimized ${_LOOP_VAR})
-                       endforeach()
-                       unset(_LOOP_VAR)
+                       file_list_suffix(OPENEXR_LIBRARIES_DEBUG "${OPENEXR_LIBRARIES}" "_d")
+                       target_link_libraries(${target}
+                                       debug ${OPENEXR_LIBRARIES_DEBUG}
+                                       optimized ${OPENEXR_LIBRARIES})
+                       unset(OPENEXR_LIBRARIES_DEBUG)
                else()
-                       target_link_libraries(${target} ${OPENEXR_LIB})
+                       target_link_libraries(${target} ${OPENEXR_LIBRARIES})
                endif()
        endif()
        if(WITH_IMAGE_OPENJPEG AND UNIX AND NOT APPLE)
-               target_link_libraries(${target} ${OPENJPEG_LIB})
+               target_link_libraries(${target} ${OPENJPEG_LIBRARIES})
        endif()
        if(WITH_CODEC_FFMPEG)
-               target_link_libraries(${target} ${FFMPEG_LIB})
+               target_link_libraries(${target} ${FFMPEG_LIBRARIES})
        endif()
        if(WITH_OPENCOLLADA)
                if(WIN32 AND NOT UNIX)
-                       foreach(_LOOP_VAR ${OPENCOLLADA_LIB})
-                               target_link_libraries(${target} debug ${_LOOP_VAR}_d)
-                               target_link_libraries(${target} optimized ${_LOOP_VAR})
-                       endforeach()
-                       unset(_LOOP_VAR)
-                       target_link_libraries(${target} debug ${PCRE_LIB}_d)
-                       target_link_libraries(${target} optimized ${PCRE_LIB})
+                       file_list_suffix(OPENCOLLADA_LIBRARIES_DEBUG "${OPENCOLLADA_LIBRARIES}" "_d")
+                       target_link_libraries(${target}
+                                       debug ${OPENCOLLADA_LIBRARIES_DEBUG}
+                                       optimized ${OPENCOLLADA_LIBRARIES})
+                       unset(OPENCOLLADA_LIBRARIES_DEBUG)
+
+                       file_list_suffix(PCRE_LIB_DEBUG "${PCRE_LIB}" "_d")
+                       target_link_libraries(${target}
+                                       debug ${PCRE_LIB_DEBUG}
+                                       optimized ${PCRE_LIB})
+                       unset(PCRE_LIB_DEBUG)
+
                        if(EXPAT_LIB)
-                               target_link_libraries(${target} debug ${EXPAT_LIB}_d)
-                               target_link_libraries(${target} optimized ${EXPAT_LIB})
+                               file_list_suffix(EXPAT_LIB_DEBUG "${EXPAT_LIB}" "_d")
+                               target_link_libraries(${target}
+                                               debug ${EXPAT_LIB_DEBUG}
+                                               optimized ${EXPAT_LIB})
+                               unset(EXPAT_LIB_DEBUG)
                        endif()
                else()
-                       target_link_libraries(${target} ${OPENCOLLADA_LIB})
-                       target_link_libraries(${target} ${PCRE_LIB})
-                       target_link_libraries(${target} ${EXPAT_LIB})
+                       target_link_libraries(${target}
+                                       ${OPENCOLLADA_LIBRARIES}
+                                       ${PCRE_LIB}
+                                       ${EXPAT_LIB})
                endif()
        endif()
        if(WITH_MEM_JEMALLOC)
-               target_link_libraries(${target} ${JEMALLOC_LIBRARY})
+               target_link_libraries(${target} ${JEMALLOC_LIBRARIES})
        endif()
        if(WIN32 AND NOT UNIX)
-               target_link_libraries(${target} ${PTHREADS_LIB})
+               target_link_libraries(${target} ${PTHREADS_LIBRARIES})
        endif()
 endmacro()
 
index b5d44db..e46b526 100644 (file)
@@ -99,7 +99,7 @@ BF_GETTEXT_LIB = 'gnu_gettext'
 BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
 
 WITH_BF_GAMEENGINE = True
-WITH_BF_PLAYER = False
+WITH_BF_PLAYER = True
 
 WITH_BF_BULLET = True
 BF_BULLET = '#extern/bullet2/src'
@@ -181,7 +181,7 @@ CXX_WARN = []
 
 LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid']
 
-PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/STACK:2097152','/INCREMENTAL:NO', '/LARGEADDRESSAWARE']
+PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/STACK:2097152','/INCREMENTAL:NO', '/LARGEADDRESSAWARE', '/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"']
 
 # # Todo
 # BF_PROFILE_CCFLAGS = ['-pg', '-g ']
index 3332a56..45a4ea5 100644 (file)
@@ -101,7 +101,7 @@ BF_GETTEXT_LIB = 'gettext'
 BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
 
 WITH_BF_GAMEENGINE = True
-WITH_BF_PLAYER = False
+WITH_BF_PLAYER = True
 
 WITH_BF_BULLET = True
 BF_BULLET = '#extern/bullet2/src'
@@ -188,7 +188,7 @@ if BF_DEBUG:
 else:
        BF_NUMJOBS=6
 
-PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/STACK:2097152','/OPT:NOREF','/INCREMENTAL:NO']
+PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/STACK:2097152','/OPT:NOREF','/INCREMENTAL:NO', '/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"']
 
 BF_BUILDDIR = '..\\build\\blender25-win64-vc'
 BF_INSTALLDIR='..\\install\\blender25-win64-vc'
index a37ed73..88db31e 100644 (file)
@@ -8,7 +8,7 @@
 
 {%- macro relbar() %}
     <div class="subnav boxheader">
-       <ul class="noprint"><li><a href="http://www.blender.org/development/coding-guides/">Coding Guides</a></li><li>•</li><li><a href="http://www.blender.org/development/report-a-bug/">Report a Bug</a></li><li>•</li><li><a href="http://www.blender.org/development/submit-a-patch/">Submit a Patch</a></li><li>•</li><li><a href="http://www.blender.org/development/release-logs/">Release Logs</a></li><li>•</li><li><a href="http://www.blender.org/development/current-projects/">Current Projects</a></li><li>•</li><li><a href="http://www.blender.org/development/architecture/">Architecture</a></li><li>•</li><li><a href="http://www.blender.org/development/building-blender/">Building Blender</a></li><li>•</li><li class="subnav-active"><a href="http://www.blender.org/documentation/250PythonDoc/contents.html">PyAPI</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Main_Page">Wiki</a></li></ul>
+       <ul class="noprint"><li><a href="http://wiki.blender.org/index.php/Dev:Contents">Documentation</a></li><li>•</li><li><a href="http://www.blender.org/development/report-a-bug/">Report a Bug</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Dev:Doc/Process/Patches">Submit a Patch</a></li><li>•</li><li><a href="http://www.blender.org/development/release-logs/">Release Logs</a></li><li>•</li><li><a href="http://www.blender.org/development/building-blender/">Building Blender</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Dev:Doc/Projects">Current Projects</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Dev:Source/Architecture">Architecture</a></li><li>•</li><li><a href="http://www.blender.org/documentation/250PythonDoc/contents.html">Python API</a></li><li>•</li><li><a href="http://wiki.blender.org">Wiki</a></li></ul>
     </div>
     <div class="related subnav">
       <h3>{{ _('Navigation') }}</h3>
diff --git a/doc/python_api/examples/bpy.props.4.py b/doc/python_api/examples/bpy.props.4.py
new file mode 100644 (file)
index 0000000..d44f894
--- /dev/null
@@ -0,0 +1,20 @@
+"""
+Update Example
+++++++++++++++
+
+It can be useful to perform an action when a property is changed and can be
+used to update other properties or synchronize with external data.
+
+All properties define update functions except for CollectionProperty.
+"""
+
+import bpy
+
+def update_func(self, context):
+    print("my test function", self)
+
+bpy.types.Scene.testprop = bpy.props.FloatProperty(update=update_func)
+
+bpy.context.scene.testprop = 11.0
+
+# >>> my test function <bpy_struct, Scene("Scene")>
index fe03db8..6f5056b 100644 (file)
@@ -32,6 +32,10 @@ set(INC_SYS
 
 )
 
+if(WIN32)
+       add_definitions(-DOPJ_STATIC)
+endif()
+
 set(SRC
        bio.c
        cio.c
index b7a0b06..ab88c9e 100644 (file)
@@ -1,7 +1,7 @@
 # $Id$
 # ***** BEGIN LGPL LICENSE BLOCK *****
 #
-# Copyright 2009 Jörg Hermann Müller
+# Copyright 2009 Jrg Hermann Mller
 #
 # This file is part of AudaSpace.
 #
@@ -29,7 +29,7 @@ set(INC
 )
 
 set(INC_SYS
-       ${PTHREADS_INC}
+       ${PTHREADS_INCLUDE_DIRS}
 )
 
 set(SRC
@@ -160,7 +160,7 @@ set(SRC
 if(WITH_CODEC_FFMPEG)
        add_definitions(-DWITH_FFMPEG)
        list(APPEND INC ffmpeg)
-       list(APPEND INC_SYS ${FFMPEG_INC})
+       list(APPEND INC_SYS ${FFMPEG_INCLUDE_DIRS})
        list(APPEND SRC
                ffmpeg/AUD_FFMPEGFactory.cpp
                ffmpeg/AUD_FFMPEGReader.cpp
@@ -195,7 +195,7 @@ endif()
 if(WITH_JACK)
        add_definitions(-DWITH_JACK)
        list(APPEND INC jack)
-       list(APPEND INC_SYS ${JACK_INC})
+       list(APPEND INC_SYS ${JACK_INCLUDE_DIRS})
        list(APPEND SRC
                jack/AUD_JackDevice.cpp
 
@@ -206,7 +206,7 @@ endif()
 if(WITH_CODEC_SNDFILE)
        add_definitions(-DWITH_SNDFILE)
        list(APPEND INC sndfile)
-       list(APPEND INC_SYS ${SNDFILE_INC})
+       list(APPEND INC_SYS ${SNDFILE_INCLUDE_DIRS})
        list(APPEND SRC
                sndfile/AUD_SndFileFactory.cpp
                sndfile/AUD_SndFileReader.cpp
@@ -218,7 +218,7 @@ endif()
 
 if(WITH_SAMPLERATE)
        add_definitions(-DWITH_SAMPLERATE)
-       list(APPEND INC_SYS ${LIBSAMPLERATE_INC})
+       list(APPEND INC_SYS ${SAMPLERATE_INCLUDE_DIRS})
        list(APPEND SRC
                SRC/AUD_SRCResampleFactory.cpp
                SRC/AUD_SRCResampleReader.cpp
@@ -231,7 +231,7 @@ endif()
 if(WITH_FFTW3 AND FALSE)
        add_definitions(-DWITH_FFTW3)
        list(APPEND INC fftw)
-       list(APPEND INC_SYS ${FFTW3_INC})
+       list(APPEND INC_SYS ${FFTW3_INCLUDE_DIRS})
        list(APPEND SRC
                fftw/AUD_BandPassFactory.cpp
                fftw/AUD_BandPassReader.cpp
index c787f54..30313f4 100644 (file)
@@ -89,7 +89,7 @@ endif()
 
 if(WITH_FFTW3)
        add_definitions(-DFFTW3=1)
-       list(APPEND INC ${FFTW3_INC})
+       list(APPEND INC ${FFTW3_INCLUDE_DIRS})
 endif()
 
 blender_add_lib(bf_intern_smoke "${SRC}" "${INC}" "${INC_SYS}")
index b6d8a1f..e026910 100644 (file)
@@ -267,6 +267,7 @@ def ngon_tesselate(from_data, indices, fix_loops=True):
     fix_loops: If this is enabled polylines that use loops to make multiple polylines are delt with correctly.
     '''
 
+    from mathutils.geometry import tesselate_polygon
     from mathutils import Vector
     vector_to_tuple = Vector.to_tuple
 
index 45f537e..f2f2e53 100644 (file)
@@ -114,6 +114,8 @@ def location_3d_to_region_2d(region, rv3d, coord):
     :return: 2d location
     :rtype: :class:`Vector`
     """
+    from mathutils import Vector
+
     prj = Vector((coord[0], coord[1], coord[2], 1.0)) * rv3d.perspective_matrix
     if prj.w > 0.0:
         width_half = region.width / 2.0
index c30c893..c33ec2d 100644 (file)
@@ -20,7 +20,6 @@
 
 from _bpy import types as bpy_types
 import _bpy
-from mathutils import Vector
 
 StructRNA = bpy_types.Struct.__bases__[0]
 StructMetaPropGroup = _bpy.StructMetaPropGroup
@@ -144,18 +143,21 @@ class _GenericBone:
     def x_axis(self):
         """ Vector pointing down the x-axis of the bone.
         """
+        from mathutils import Vector
         return Vector((1.0, 0.0, 0.0)) * self.matrix.to_3x3()
 
     @property
     def y_axis(self):
         """ Vector pointing down the x-axis of the bone.
         """
+        from mathutils import Vector
         return Vector((0.0, 1.0, 0.0)) * self.matrix.to_3x3()
 
     @property
     def z_axis(self):
         """ Vector pointing down the x-axis of the bone.
         """
+        from mathutils import Vector
         return Vector((0.0, 0.0, 1.0)) * self.matrix.to_3x3()
 
     @property
index 9311987..b0fb3b6 100644 (file)
@@ -111,12 +111,16 @@ def draw(layout, context, context_member, property_type, use_edit=True):
             continue
 
         row = layout.row()
-        convert_to_pyobject = getattr(val, "convert_to_pyobject", None)
+        to_dict = getattr(val, "to_dict", None)
+        to_list = getattr(val, "to_list", None)
 
         val_orig = val
-        if convert_to_pyobject:
-            val_draw = val = val.convert_to_pyobject()
-            val_draw = str(val_draw)
+        if to_dict:
+            val = to_dict()
+            val_draw = str(val)
+        elif to_list:
+            val = to_list()
+            val_draw = str(val)
         else:
             val_draw = val
 
@@ -131,7 +135,7 @@ def draw(layout, context, context_member, property_type, use_edit=True):
         row.label(text=key)
 
         # explicit exception for arrays
-        if convert_to_pyobject and not hasattr(val_orig, "len"):
+        if to_dict or to_list:
             row.label(text=val_draw)
         else:
             if key in rna_properties:
index 82849cc..a895916 100644 (file)
 #
 # ##### END GPL LICENSE BLOCK #####
 
-# <pep8 compliant>
+# <pep8-80 compliant>
 
 import bpy
 
 
-def pose_info():
+def pose_frame_info(obj):
     from mathutils import Matrix
 
     info = {}
 
-    obj = bpy.context.object
     pose = obj.pose
 
     pose_items = pose.bones.items()
@@ -51,7 +50,6 @@ def pose_info():
         except:
             binfo["matrix_pose_inv"] = Matrix()
 
-        print(binfo["matrix_pose"])
         info[name] = binfo
 
     for name, pbone in pose_items:
@@ -67,45 +65,86 @@ def pose_info():
             matrix = binfo_parent["matrix_pose_inv"] * matrix
             rest_matrix = binfo_parent["matrix_local_inv"] * rest_matrix
 
-        matrix = rest_matrix.inverted() * matrix
+        binfo["matrix_key"] = rest_matrix.inverted() * matrix
+
+    return info
 
-        binfo["matrix_key"] = matrix.copy()
 
+def obj_frame_info(obj):
+    info = {}
+    # parent = obj.parent
+    info["matrix_key"] = obj.matrix_local.copy()
     return info
 
 
-def bake(frame_start, frame_end, step=1, only_selected=False):
+def bake(frame_start,
+         frame_end, step=1,
+         only_selected=False,
+         do_pose=True,
+         do_object=True,
+         do_constraint_clear=False,
+         ):
+
     scene = bpy.context.scene
     obj = bpy.context.object
     pose = obj.pose
+    frame_back = scene.frame_current
+
+    if pose is None:
+        do_pose = False
 
-    info_ls = []
+    if do_pose is None and do_object is None:
+        return None
+
+    pose_info = []
+    obj_info = []
 
     frame_range = range(frame_start, frame_end + 1, step)
 
-    # could spped this up by applying steps here too...
+    # -------------------------------------------------------------------------
+    # Collect transformations
+    
+    # could speed this up by applying steps here too...
     for f in frame_range:
         scene.frame_set(f)
 
-        info = pose_info()
-        info_ls.append(info)
+        if do_pose:
+            pose_info.append(pose_frame_info(obj))
+        if do_object:
+            obj_info.append(obj_frame_info(obj))
+
         f += 1
 
+    # -------------------------------------------------------------------------
+    # Create action
+
+    # incase animation data hassnt been created
+    atd = obj.animation_data_create()
     action = bpy.data.actions.new("Action")
+    atd.action = action
 
-    bpy.context.object.animation_data.action = action
+    if do_pose:
+        pose_items = pose.bones.items()
+    else:
+        pose_items = []  # skip
 
-    pose_items = pose.bones.items()
+    # -------------------------------------------------------------------------
+    # Apply transformations to action
 
-    for name, pbone in pose_items:
+    # pose
+    for name, pbone in (pose_items if do_pose else ()):
         if only_selected and not pbone.bone.select:
             continue
 
+        if do_constraint_clear:
+            while pbone.constraints:
+                pbone.constraints.remove(pbone.constraints[0])
+
         for f in frame_range:
-            matrix = info_ls[int((f - frame_start) / step)][name]["matrix_key"]
+            matrix = pose_info[(f - frame_start) // step][name]["matrix_key"]
 
-            #pbone.location = matrix.to_translation()
-            #pbone.rotation_quaternion = matrix.to_quaternion()
+            # pbone.location = matrix.to_translation()
+            # pbone.rotation_quaternion = matrix.to_quaternion()
             pbone.matrix_basis = matrix
 
             pbone.keyframe_insert("location", -1, f, name)
@@ -121,10 +160,35 @@ def bake(frame_start, frame_end, step=1, only_selected=False):
 
             pbone.keyframe_insert("scale", -1, f, name)
 
+    # object. TODO. multiple objects
+    if do_object:
+        if do_constraint_clear:
+            while obj.constraints:
+                obj.constraints.remove(obj.constraints[0])
+
+        for f in frame_range:
+            matrix = obj_info[(f - frame_start) // step]["matrix_key"]
+            obj.matrix_local = matrix
+
+            obj.keyframe_insert("location", -1, f)
+
+            rotation_mode = obj.rotation_mode
+
+            if rotation_mode == 'QUATERNION':
+                obj.keyframe_insert("rotation_quaternion", -1, f)
+            elif rotation_mode == 'AXIS_ANGLE':
+                obj.keyframe_insert("rotation_axis_angle", -1, f)
+            else:  # euler, XYZ, ZXY etc
+                obj.keyframe_insert("rotation_euler", -1, f)
+
+            obj.keyframe_insert("scale", -1, f)
+
+    scene.frame_set(frame_back)
+
     return action
 
 
-from bpy.props import IntProperty, BoolProperty
+from bpy.props import IntProperty, BoolProperty, EnumProperty
 
 
 class BakeAction(bpy.types.Operator):
@@ -144,10 +208,31 @@ class BakeAction(bpy.types.Operator):
             default=1, min=1, max=120)
     only_selected = BoolProperty(name="Only Selected",
             default=True)
+    clear_consraints = BoolProperty(name="Clear Constraints",
+            default=False)
+    bake_types = EnumProperty(
+            name="Bake Data",
+            options={'ENUM_FLAG'},
+            items=(('POSE', "Pose", ""),
+                   ('OBJECT', "Object", ""),
+                   ),
+            default={'POSE'},
+            )
 
     def execute(self, context):
 
-        action = bake(self.frame_start, self.frame_end, self.step, self.only_selected)
+        action = bake(self.frame_start,
+                      self.frame_end,
+                      self.step,
+                      self.only_selected,
+                      'POSE' in self.bake_types,
+                      'OBJECT' in self.bake_types,
+                      self.clear_consraints,
+                      )
+
+        if action is None:
+            self.report({'INFO'}, "Nothing to bake")
+            return {'CANCELLED'}
 
         # basic cleanup, could move elsewhere
         for fcu in action.fcurves:
index 90b0fa0..2ecca8a 100644 (file)
@@ -22,6 +22,24 @@ from mathutils import Vector
 import bpy
 from bpy.props import BoolProperty, EnumProperty, IntProperty, FloatProperty, FloatVectorProperty
 
+
+def object_ensure_material(obj, mat_name):
+    """ Use an existing material or add a new one.
+    """
+    mat = mat_slot = None
+    for mat_slot in obj.material_slots:
+        mat = mat_slot.material
+        if mat:
+            break
+    if mat is None:
+        mat = bpy.data.materials.new(mat_name)
+        if mat_slot:
+            mat_slot.material = mat
+        else:
+            obj.data.materials.append(mat)
+    return mat
+
+
 class QuickFur(bpy.types.Operator):
     bl_idname = "object.quick_fur"
     bl_label = "Quick Fur"
@@ -78,6 +96,7 @@ class QuickFur(bpy.types.Operator):
 
         return {'FINISHED'}
 
+
 class QuickExplode(bpy.types.Operator):
     bl_idname = "object.quick_explode"
     bl_label = "Quick Explode"
@@ -93,40 +112,44 @@ class QuickExplode(bpy.types.Operator):
     amount = IntProperty(name="Amount of pieces",
             default=100, min=2, max=10000, soft_min=2, soft_max=10000)
 
-    duration = IntProperty(name="Duration",
-            default=50, min=1, max=10000, soft_min=1, soft_max=10000)
+    frame_duration = IntProperty(name="Duration",
+            default=50, min=1, max=300000, soft_min=1, soft_max=10000)
 
-    start_frame = IntProperty(name="Start Frame",
-            default=1, min=1, max=10000, soft_min=1, soft_max=10000)
+    frame_start = IntProperty(name="Start Frame",
+            default=1, min=1, max=300000, soft_min=1, soft_max=10000)
 
-    end_frame = IntProperty(name="End Frame",
-            default=10, min=1, max=10000, soft_min=1, soft_max=10000)
+    frame_end = IntProperty(name="End Frame",
+            default=10, min=1, max=300000, soft_min=1, soft_max=10000)
 
     velocity = FloatProperty(name="Outwards Velocity",
-            default=1, min=0, max=1000, soft_min=0, soft_max=10)
+            default=1, min=0, max=300000, soft_min=0, soft_max=10)
 
     fade = BoolProperty(name="Fade",
                 description="Fade the pieces over time.",
                 default=True)
 
-    invert_order = BoolProperty(name="Invert Order",
-                description="Blend objects in the opposite direction (only for Blend style explosion).",
-                default=False)
-
     def execute(self, context):
         fake_context = bpy.context.copy()
-        mesh_objects = [obj for obj in context.selected_objects if obj.type == 'MESH']
+        obj_act = context.active_object
+
+        if obj_act.type != 'MESH':
+            self.report({'ERROR'}, "Active object is not a mesh")
+            return {'CANCELLED'}
+
+        mesh_objects = [obj for obj in context.selected_objects
+                        if obj.type == 'MESH' and obj != obj_act]
+        mesh_objects.insert(0, obj_act)
 
         if self.style == 'BLEND' and len(mesh_objects) != 2:
-            self.report({'ERROR'}, "Select two mesh objects.")
+            self.report({'ERROR'}, "Select two mesh objects")
             return {'CANCELLED'}
         elif not mesh_objects:
-            self.report({'ERROR'}, "Select at least one mesh object.")
+            self.report({'ERROR'}, "Select at least one mesh object")
             return {'CANCELLED'}
 
         for obj in mesh_objects:
-            if len(obj.particle_systems) > 0:
-                self.report({'ERROR'}, "Selected object's can't have particle systems.")
+            if obj.particle_systems:
+                self.report({'ERROR'}, "Object %r already has a particle system" % obj.name)
                 return {'CANCELLED'}
 
         if self.fade:
@@ -137,16 +160,12 @@ class QuickExplode(bpy.types.Operator):
                 tex.color_ramp.elements[0].position = 0.333
                 tex.color_ramp.elements[1].position = 0.666
 
-            tex.color_ramp.elements[0].color[3] = 1
-            tex.color_ramp.elements[1].color[3] = 0
+            tex.color_ramp.elements[0].color[3] = 1.0
+            tex.color_ramp.elements[1].color[3] = 0.0
 
         if self.style == 'BLEND':
-            if self.invert_order:
-                from_obj = mesh_objects[1]
-                to_obj = mesh_objects[0]
-            else:
-                from_obj = mesh_objects[0]
-                to_obj = mesh_objects[1]
+            from_obj = mesh_objects[1]
+            to_obj = mesh_objects[0]
 
         for obj in mesh_objects:
             fake_context["object"] = obj
@@ -154,31 +173,28 @@ class QuickExplode(bpy.types.Operator):
 
             settings = obj.particle_systems[-1].settings
             settings.count = self.amount
-            settings.frame_start = self.start_frame
-            settings.frame_end = self.end_frame - self.duration
-            settings.lifetime = self.duration
+            settings.frame_start = self.frame_start
+            settings.frame_end = self.frame_end - self.frame_duration
+            settings.lifetime = self.frame_duration
             settings.normal_factor = self.velocity
             settings.render_type = 'NONE'
 
-            bpy.ops.object.modifier_add(fake_context, type='EXPLODE')
-            explode = obj.modifiers[-1]
+            explode = obj.modifiers.new(name='Explode', type='EXPLODE')
             explode.use_edge_cut = True
 
             if self.fade:
                 explode.show_dead = False
-                bpy.ops.mesh.uv_texture_add(fake_context);
+                bpy.ops.mesh.uv_texture_add(fake_context)
                 uv = obj.data.uv_textures[-1]
                 uv.name = "Explode fade"
                 explode.particle_uv = uv.name
 
-                if len(obj.material_slots) == 0:
-                    obj.data.materials.append(bpy.data.materials.new("Explode fade"))
+                mat = object_ensure_material(obj, "Explode Fade")
 
-                mat = obj.data.materials[0]
                 mat.use_transparency = True
                 mat.use_transparent_shadows = True
-                mat.alpha = 0
-                mat.specular_alpha = 0
+                mat.alpha = 0.0
+                mat.specular_alpha = 0.0
 
                 tex_slot = mat.texture_slots.add()
 
@@ -190,16 +206,12 @@ class QuickExplode(bpy.types.Operator):
 
                 if self.style == 'BLEND':
                     if obj == to_obj:
-                        tex_slot.alpha_factor = -1
+                        tex_slot.alpha_factor = -1.0
                         elem = tex.color_ramp.elements[1]
-                        elem.color[0] = mat.diffuse_color[0]
-                        elem.color[1] = mat.diffuse_color[1]
-                        elem.color[2] = mat.diffuse_color[2]
+                        elem.color = mat.diffuse_color
                     else:
                         elem = tex.color_ramp.elements[0]
-                        elem.color[0] = mat.diffuse_color[0]
-                        elem.color[1] = mat.diffuse_color[1]
-                        elem.color[2] = mat.diffuse_color[2]
+                        elem.color = mat.diffuse_color
                 else:
                     tex_slot.use_map_color_diffuse = False
 
@@ -223,14 +235,18 @@ class QuickExplode(bpy.types.Operator):
                     explode.show_dead = True
             else:
                 settings.factor_random = self.velocity
-                settings.angular_velocity_factor = self.velocity/10
+                settings.angular_velocity_factor = self.velocity / 10.0
 
         return {'FINISHED'}
 
+    def invoke(self, context, event):
+        self.frame_start = context.scene.frame_current
+        self.frame_end = self.frame_start + self.frame_duration
+        return self.execute(context)
 
 def obj_bb_minmax(obj, min_co, max_co):
     for i in range(0, 8):
-        bb_vec = Vector((obj.bound_box[i][0], obj.bound_box[i][1], obj.bound_box[i][2])) * obj.matrix_world
+        bb_vec = Vector(obj.bound_box[i]) * obj.matrix_world
 
         min_co[0] = min(bb_vec[0], min_co[0])
         min_co[1] = min(bb_vec[1], min_co[1])
@@ -260,8 +276,8 @@ class QuickSmoke(bpy.types.Operator):
     def execute(self, context):
         fake_context = bpy.context.copy()
         mesh_objects = [obj for obj in context.selected_objects if obj.type == 'MESH']
-        min_co = Vector((100000, 100000, 100000))
-        max_co = Vector((-100000, -100000, -100000))
+        min_co = Vector((100000.0, 100000.0, 100000.0))
+        max_co = -min_co
 
         if not mesh_objects:
             self.report({'ERROR'}, "Select at least one mesh object.")
@@ -441,4 +457,4 @@ class QuickFluid(bpy.types.Operator):
         if self.start_baking:
             bpy.ops.fluid.bake()
 
-        return {'FINISHED'}
\ No newline at end of file
+        return {'FINISHED'}
index 11a1293..cb26b09 100644 (file)
@@ -112,14 +112,25 @@ class DATA_PT_shape_curve(CurveButtonsPanel, bpy.types.Panel):
             sub.prop(curve, "use_fill_front")
             sub.prop(curve, "use_fill_back")
             col.prop(curve, "use_fill_deform", text="Fill Deformed")
+            
+class DATA_PT_curve_texture_space(CurveButtonsPanel, bpy.types.Panel):
+    bl_label = "Texture Space"
+    bl_options = {'DEFAULT_CLOSED'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+    
+    def draw(self, context):
+        layout = self.layout
+        
+        ob = context.object
+        curve = context.curve
 
-        col.label(text="Textures:")
-        col.prop(curve, "use_uv_as_generated")
-        col.prop(curve, "use_auto_texspace")
+        row = layout.row()
+        row.prop(curve, "use_auto_texspace")
+        row.prop(curve, "use_uv_as_generated")
         
         row = layout.row()
-        row.column().prop(curve, "texspace_location")
-        row.column().prop(curve, "texspace_size")
+        row.column().prop(curve, "texspace_location", text="Location")
+        row.column().prop(curve, "texspace_size", text="Size")
 
 
 class DATA_PT_geometry_curve(CurveButtonsPanel, bpy.types.Panel):
index c568d10..dad308c 100644 (file)
@@ -71,9 +71,22 @@ class DATA_PT_metaball(DataButtonsPanel, bpy.types.Panel):
         layout.label(text="Update:")
         layout.prop(mball, "update_method", expand=True)
         
+        
+class DATA_PT_mball_texture_space(DataButtonsPanel, bpy.types.Panel):
+    bl_label = "Texture Space"
+    bl_options = {'DEFAULT_CLOSED'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+    
+    def draw(self, context):
+        layout = self.layout
+
+        mball = context.meta_ball
+
+        layout.prop(mball, "use_auto_texspace")
+        
         row = layout.row()
-        row.column().prop(mball, "texspace_location")
-        row.column().prop(mball, "texspace_size")
+        row.column().prop(mball, "texspace_location", text="Location")
+        row.column().prop(mball, "texspace_size", text="Size")
 
 
 class DATA_PT_metaball_element(DataButtonsPanel, bpy.types.Panel):
index 1fb2e5b..2b12e75 100644 (file)
@@ -350,7 +350,7 @@ class INFO_MT_help(bpy.types.Menu):
         layout = self.layout
 
         layout.operator("wm.url_open", text="Manual", icon='HELP').url = 'http://wiki.blender.org/index.php/Doc:Manual'
-        layout.operator("wm.url_open", text="Release Log", icon='URL').url = 'http://www.blender.org/development/release-logs/blender-257/'
+        layout.operator("wm.url_open", text="Release Log", icon='URL').url = 'http://www.blender.org/development/release-logs/blender-258/'
 
         layout.separator()
 
index 222f273..dd5b843 100644 (file)
@@ -438,6 +438,8 @@ class USERPREF_PT_system(bpy.types.Panel):
         col.label(text="OpenGL:")
         col.prop(system, "gl_clip_alpha", slider=True)
         col.prop(system, "use_mipmaps")
+        col.label(text="Anisotropic Filtering")
+        col.prop(system, "anisotropic_filter", text="")
         col.prop(system, "use_vertex_buffer_objects")
         #Anti-aliasing is disabled as it breaks broder/lasso select
         #col.prop(system, "use_antialiasing")
index 6d1caa5..44b75f6 100644 (file)
@@ -98,6 +98,8 @@ class VIEW3D_HT_header(bpy.types.Header):
             row.prop(toolsettings, "use_snap_peel_object", text="")
         elif toolsettings.snap_element == 'FACE':
             row.prop(toolsettings, "use_snap_project", text="")
+            if toolsettings.use_snap_project and obj.mode == 'EDIT':
+                row.prop(toolsettings, "use_snap_project_self", text="")
 
         # OpenGL render
         row = layout.row(align=True)
index 1014d8e..2b5a407 100644 (file)
   </style>
 </head>
 <body>
-<p class="title"><b>Blender 2.57</b></p>
+<p class="title"><b>Blender 2.58</b></p>
 <p><br></p>
 <p class="header"><b>About</b></p>
 <p class="body">Welcome to Blender, the free, open source 3D application for modeling, animation, rendering, compositing, video editing and game creation. Blender is available for Linux, Mac OS X, Windows, Solaris and FreeBSD and has a large world-wide community.</p>
 <p class="body">Blender can be used freely for any purpose, including commercial use and distribution. It's free and open-source software, released under the GNU GPL licence. The entire source code is available on our website.</p>
 <p class="body">For more information, visit <a href="http://www.blender.org">blender.org</a>.</p>
 <p><br></p>
-<p class="header"><b>2.57</b></p>
-<p class="body">The Blender Foundation and online developer community is proud to present Blender 2.57. This release is the first official stable release of the Blender 2.5 series, and represents the culmination of many years of redesign and development work. <a href="http://www.blender.org/development/release-logs/blender-256-beta/">More information about this release</a>.</p>
+<p class="header"><b>2.58</b></p>
+<p class="body">The Blender Foundation and online developer community is proud to present Blender 2.58. This release is the second official stable release of the Blender 2.5 series, and represents the culmination of many years of redesign and development work. <a href="http://www.blender.org/development/release-logs/blender-258/">More information about this release</a>.</p>
 <p class="body">What to Expect:</p>
 <p class="body">       •     Big improvements - This is our most exciting version to date, already a significant improvement in many ways over 2.49</p>
 <p class="body">       •     Missing/Incomplete Features - Although most of it is there, not all functionality from pre-2.5 versions has been restored yet. Some functionality may be re-implemented a different way.</p>
 <p class="body">       •     Changes - If you're used to the old Blenders, Blender 2.5 may seem quite different at first, but it won't be long before it grows on you even more than before.</p>
 <p><br></p>
 <p class="header"><b>Bugs</b></p>
-<p class="body">Although Blender 2.57 is considered a stable release, you may encounter a bug. If you do, please help us by posting it in the bug tracker or using Help → Report a Bug from inside Blender 2.57. If it wasn’t reported yet, please log in (or register) and fill in detailed information about the error. Please post detailed instructions on how to reproduce it or post a .blend file showcasing the bug.</p>
+<p class="body">Although Blender 2.58 is considered a stable release, you may encounter a bug. If you do, please help us by posting it in the bug tracker or using Help → Report a Bug from inside Blender 2.58. If it wasn’t reported yet, please log in (or register) and fill in detailed information about the error. Please post detailed instructions on how to reproduce it or post a .blend file showcasing the bug.</p>
 <p><br></p>
 <p class="header"><b>Package Contents</b></p>
 <p class="body">The downloaded Blender package includes:</p>
@@ -51,7 +51,7 @@
 <p class="header"><b>Links</b></p>
 <p class="body">Users:</p>
 <p class="body">       General information             <a href="http://www.blender.org">www.blender.org</a> <br>
-       Full release log                        <a href="http://www.blender.org/development/release-logs/blender-257/">www.blender.org/development/release-logs/blender-257/</a><br>
+       Full release log                        <a href="http://www.blender.org/development/release-logs/blender-258/">www.blender.org/development/release-logs/blender-258/</a><br>
        Tutorials                       <a href="http://www.blender.org/education-help/">www.blender.org/education-help/</a>    <br>
        Manual                  <a href="http://wiki.blender.org/index.php/Doc:Manual">wiki.blender.org/index.php/Doc:Manual</a><br>
        User Forum                      <a href="http://www.blenderartists.org">www.blenderartists.org</a><br>
index 698f0f0..7d3de68 100644 (file)
@@ -216,7 +216,7 @@ void pose_remove_group(struct Object *ob);
 /* Assorted Evaluation ----------------- */    
 
 /* Used for the Action Constraint */
-void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
+void what_does_obaction(struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
 
 /* for proxy */
 void copy_pose_result(struct bPose *to, struct bPose *from);
index 6874597..b00db53 100644 (file)
@@ -97,15 +97,10 @@ extern void makeDispListCurveTypes_forRender(struct Scene *scene, struct Object
 extern void makeDispListCurveTypes_forOrco(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
 extern void makeDispListMBall(struct Scene *scene, struct Object *ob);
 extern void makeDispListMBall_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
-extern void shadeDispList(struct Scene *scene, struct Base *base);
-extern void shadeMeshMCol(struct Scene *scene, struct Object *ob, struct Mesh *me);
 
 int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4);
-void reshadeall_displist(struct Scene *scene);
 void filldisplist(struct ListBase *dispbase, struct ListBase *to, int flipnormal);
 
-void fastshade_free_render(void);
-
 float calc_taper(struct Scene *scene, struct Object *taperobj, int cur, int tot);
 
 /* add Orco layer to the displist object which has got derived mesh and return orco */
index 5078657..9c06e32 100644 (file)
@@ -273,12 +273,12 @@ endif()
 
 if(WITH_CODEC_QUICKTIME)
        list(APPEND INC ../quicktime)
-       list(APPEND INC_SYS ${QUICKTIME_INC})
+       list(APPEND INC_SYS ${QUICKTIME_INCLUDE_DIRS})
        add_definitions(-DWITH_QUICKTIME)
 endif()
 
 if(WITH_CODEC_FFMPEG)
-       list(APPEND INC_SYS ${FFMPEG_INC})
+       list(APPEND INC_SYS ${FFMPEG_INCLUDE_DIRS})
        add_definitions(-DWITH_FFMPEG)
 endif()
 
index 1fed115..ef4f320 100644 (file)
@@ -69,8 +69,9 @@ typedef struct DagNode
        void * ob;
        void * first_ancestor;
        int ancestor_count;
-       unsigned int lay;                       // accumulated layers of its relations + itself
+       unsigned int lay;                               // accumulated layers of its relations + itself
        unsigned int scelay;                    // layers due to being in scene
+       unsigned int customdata_mask;   // customdata mask
        int lasttime;           // if lasttime != DagForest->time, this node was not evaluated yet for flushing
        int BFS_dist;           // BFS distance
        int DFS_dist;           // DFS distance
index 21d9701..08eed6d 100644 (file)
@@ -1123,7 +1123,7 @@ void copy_pose_result(bPose *to, bPose *from)
 /* For the calculation of the effects of an Action at the given frame on an object 
  * This is currently only used for the Action Constraint 
  */
-void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe)
+void what_does_obaction (Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe)
 {
        bActionGroup *agrp= action_groups_find_named(act, groupname);
        
index 1763866..0747d87 100644 (file)
@@ -171,7 +171,12 @@ bMotionPath *animviz_verify_motionpaths(Scene *scene, Object *ob, bPoseChannel *
                avs= &ob->avs;
                dst= &ob->mpath;
        }
-       
+
+       /* avoid 0 size allocs */
+       if(avs->path_sf >= avs->path_ef) {
+               return NULL;
+       }
+
        /* if there is already a motionpath, just return that,
         * but provided it's settings are ok 
         */
index fd25ebe..0b31e51 100644 (file)
@@ -1343,8 +1343,12 @@ void vec_roll_to_mat3(float *vec, float roll, float mat[][3])
        cross_v3_v3v3(axis,target,nor);
 
        /* was 0.0000000000001, caused bug [#23954], smaller values give unstable
-        * roll when toggling editmode */
-       if (dot_v3v3(axis,axis) > 0.00001f) {
+        * roll when toggling editmode.
+        *
+        * was 0.00001, causes bug [#27675], with 0.00000495,
+        * so a value inbetween these is needed.
+        */
+       if (dot_v3v3(axis,axis) > 0.000001f) {
                /* if nor is *not* a multiple of target ... */
                normalize_v3(axis);
                
index 5a94325..0f545ad 100644 (file)
@@ -154,7 +154,6 @@ static void clear_global(void)
 {
 //     extern short winqueue_break;    /* screen.c */
 
-       fastshade_free_render();        /* lamps hang otherwise */
        free_main(G.main);                      /* free all lib data */
        
 //     free_vertexpaint();
index fe3286d..a321e71 100644 (file)
@@ -424,7 +424,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
 /* ------------ General Target Matrix Tools ---------- */
 
 /* function that sets the given matrix based on given vertex group in mesh */
-static void contarget_get_mesh_mat (Scene *scene, Object *ob, const char *substring, float mat[][4])
+static void contarget_get_mesh_mat (Object *ob, const char *substring, float mat[][4])
 {
        DerivedMesh *dm = NULL;
        Mesh *me= ob->data;
@@ -449,16 +449,9 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, const char *substr
                freeDM= 1;
        }
        else {
-               /* when not in EditMode, use the 'final' derived mesh 
-                *      - check if the custom data masks for derivedFinal mean that we can just use that
-                *        (this is more effficient + sufficient for most cases)
-                */
-               if (!(ob->lastDataMask & CD_MASK_MDEFORMVERT)) {
-                       dm = mesh_get_derived_final(scene, ob, CD_MASK_MDEFORMVERT);
-                       freeDM= 1;
-               }
-               else 
-                       dm = (DerivedMesh *)ob->derivedFinal;
+               /* when not in EditMode, use the 'final' derived mesh, depsgraph
+                * ensures we build with CD_MDEFORMVERT layer */
+               dm = (DerivedMesh *)ob->derivedFinal;
        }
        
        /* only continue if there's a valid DerivedMesh */
@@ -587,7 +580,7 @@ static void contarget_get_lattice_mat (Object *ob, const char *substring, float
 
 /* generic function to get the appropriate matrix for most target cases */
 /* The cases where the target can be object data have not been implemented */
-static void constraint_target_to_mat4 (Scene *scene, Object *ob, const char *substring, float mat[][4], short from, short to, float headtail)
+static void constraint_target_to_mat4 (Object *ob, const char *substring, float mat[][4], short from, short to, float headtail)
 {
        /*      Case OBJECT */
        if (!strlen(substring)) {
@@ -604,7 +597,7 @@ static void constraint_target_to_mat4 (Scene *scene, Object *ob, const char *sub
         *              way as constraints can only really affect things on object/bone level.
         */
        else if (ob->type == OB_MESH) {
-               contarget_get_mesh_mat(scene, ob, substring, mat);
+               contarget_get_mesh_mat(ob, substring, mat);
                constraint_mat_convertspace(ob, NULL, mat, from, to);
        }
        else if (ob->type == OB_LATTICE) {
@@ -684,10 +677,10 @@ static bConstraintTypeInfo CTI_CONSTRNAME = {
 /* This function should be used for the get_target_matrix member of all 
  * constraints that are not picky about what happens to their target matrix.
  */
-static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void default_get_tarmat (bConstraint *con, bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
 {
        if (VALID_CONS_TARGET(ct))
-               constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+               constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
        else if (ct)
                unit_m4(ct->matrix);
 }
@@ -1159,7 +1152,7 @@ static void kinematic_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstra
        bKinematicConstraint *data= con->data;
        
        if (VALID_CONS_TARGET(ct)) 
-               constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+               constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
        else if (ct) {
                if (data->flag & CONSTRAINT_IK_AUTO) {
                        Object *ob= cob->ob;
@@ -2046,7 +2039,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
                /* firstly calculate the matrix the normal way, then let the py-function override
                 * this matrix if it needs to do so
                 */
-               constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+               constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
                
                /* only execute target calculation if allowed */
 #ifdef WITH_PYTHON
@@ -2165,7 +2158,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
                unit_m4(ct->matrix);
                
                /* get the transform matrix of the target */
-               constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+               constraint_target_to_mat4(ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
                
                /* determine where in transform range target is */
                /* data->type is mapped as follows for backwards compatability:
@@ -2216,7 +2209,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
                        tchan->rotmode= pchan->rotmode;
                        
                        /* evaluate action using workob (it will only set the PoseChannel in question) */
-                       what_does_obaction(cob->scene, cob->ob, &workob, pose, data->act, pchan->name, t);
+                       what_does_obaction(cob->ob, &workob, pose, data->act, pchan->name, t);
                        
                        /* convert animation to matrices for use here */
                        pchan_calc_mat(tchan);
@@ -2230,7 +2223,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
                        
                        /* evaluate using workob */
                        // FIXME: we don't have any consistent standards on limiting effects on object...
-                       what_does_obaction(cob->scene, cob->ob, &workob, NULL, data->act, NULL, t);
+                       what_does_obaction(cob->ob, &workob, NULL, data->act, NULL, t);
                        object_to_mat4(&workob, ct->matrix);
                }
                else {
index 472d7d7..c280041 100644 (file)
@@ -372,6 +372,9 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
                node2->first_ancestor = ob;
                node2->ancestor_count += 1;
        }
+
+       /* also build a custom data mask for dependencies that need certain layers */
+       node->customdata_mask= 0;
        
        if (ob->type == OB_ARMATURE) {
                if (ob->pose){
@@ -451,8 +454,12 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
                        case PARSKEL:
                                dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Parent");
                                break;
-                       case PARVERT1: case PARVERT3: case PARBONE:
+                       case PARVERT1: case PARVERT3:
                                dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Vertex Parent");
+                               node2->customdata_mask |= CD_MASK_ORIGINDEX;
+                               break;
+                       case PARBONE:
+                               dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Bone Parent");
                                break;
                        default:
                                if(ob->parent->type==OB_LATTICE) 
@@ -647,8 +654,11 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
                                if (ELEM(con->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO))
                                        dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, cti->name);
                                else {
-                                       if (ELEM3(obt->type, OB_ARMATURE, OB_MESH, OB_LATTICE) && (ct->subtarget[0]))
+                                       if (ELEM3(obt->type, OB_ARMATURE, OB_MESH, OB_LATTICE) && (ct->subtarget[0])) {
                                                dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, cti->name);
+                                               if (obt->type == OB_MESH)
+                                                       node2->customdata_mask |= CD_MASK_MDEFORMVERT;
+                                       }
                                        else
                                                dag_add_relation(dag, node2, node, DAG_RL_OB_OB, cti->name);
                                }
@@ -722,6 +732,9 @@ struct DagForest *build_dag(Main *bmain, Scene *sce, short mask)
                                        itA->node->color |= itA->type;
                                }
                        }
+
+                       /* also flush custom data mask */
+                       ((Object*)node->ob)->customdata_mask= node->customdata_mask;
                }
        }
        /* now set relations equal, so that when only one parent changes, the correct recalcs are found */
index 9aa794a..8f57490 100644 (file)
@@ -65,9 +65,6 @@
 #include "BKE_lattice.h"
 #include "BKE_modifier.h"
 
-#include "RE_pipeline.h"
-#include "RE_shader_ext.h"
-
 #include "BLO_sys_types.h" // for intptr_t support
 
 #include "ED_curve.h" /* for BKE_curve_nurbs */
@@ -286,499 +283,6 @@ int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, i
        return 1;
 }
 
-/* ***************************** shade displist. note colors now are in rgb(a) order ******************** */
-
-/* create default shade input... save cpu cycles with ugly global */
-/* XXXX bad code warning: local ShadeInput initialize... */
-static ShadeInput shi;
-static void init_fastshade_shadeinput(Render *re)
-{
-       memset(&shi, 0, sizeof(ShadeInput));
-       shi.lay= RE_GetScene(re)->lay;
-       shi.view[2]= -1.0f;
-       shi.passflag= SCE_PASS_COMBINED;
-       shi.combinedflag= -1;
-}
-
-static Render *fastshade_get_render(Scene *UNUSED(scene))
-{
-       // XXX 2.5: this crashes combined with previewrender
-       // due to global R so disabled for now
-#if 0
-       /* XXX ugly global still, but we can't do preview while rendering */
-       if(G.rendering==0) {
-               
-               Render *re= RE_GetRender("_Shade View_");
-               if(re==NULL) {
-                       re= RE_NewRender("_Shade View_");
-               
-                       RE_Database_Baking(re, scene, 0, 0);    /* 0= no faces */
-               }
-               return re;
-       }
-#endif
-       
-       return NULL;
-}
-
-/* called on file reading */
-void fastshade_free_render(void)
-{
-       Render *re= RE_GetRender("_Shade View_");
-       
-       if(re) {
-               RE_Database_Free(re);
-               RE_FreeRender(re);
-       }
-}
-
-
-static void fastshade_customdata(CustomData *fdata, int a, int j, Material *ma)
-{
-       CustomDataLayer *layer;
-       MTFace *mtface;
-       int index, needuv= ma->texco & TEXCO_UV;
-       char *vertcol;
-
-       shi.totuv= 0;
-       shi.totcol= 0;
-
-       for(index=0; index<fdata->totlayer; index++) {
-               layer= &fdata->layers[index];
-               
-               if(needuv && layer->type == CD_MTFACE && shi.totuv < MAX_MTFACE) {
-                       mtface= &((MTFace*)layer->data)[a];
-
-                       shi.uv[shi.totuv].uv[0]= 2.0f*mtface->uv[j][0]-1.0f;
-                       shi.uv[shi.totuv].uv[1]= 2.0f*mtface->uv[j][1]-1.0f;
-                       shi.uv[shi.totuv].uv[2]= 1.0f;
-
-                       shi.uv[shi.totuv].name= layer->name;
-                       shi.totuv++;
-               }
-               else if(layer->type == CD_MCOL && shi.totcol < MAX_MCOL) {
-                       vertcol= (char*)&((MCol*)layer->data)[a*4 + j];
-
-                       shi.col[shi.totcol].col[0]= ((float)vertcol[3])/255.0f;
-                       shi.col[shi.totcol].col[1]= ((float)vertcol[2])/255.0f;
-                       shi.col[shi.totcol].col[2]= ((float)vertcol[1])/255.0f;
-
-                       shi.col[shi.totcol].name= layer->name;
-                       shi.totcol++;
-               }
-       }
-
-       if(needuv && shi.totuv == 0)
-               VECCOPY(shi.uv[0].uv, shi.lo);
-
-       if(shi.totcol)
-               VECCOPY(shi.vcol, shi.col[0].col);
-}
-
-static void fastshade(float *co, float *nor, float *orco, Material *ma, char *col1, char *col2)
-{
-       ShadeResult shr;
-       int a;
-       
-       VECCOPY(shi.co, co);
-       shi.vn[0]= -nor[0];
-       shi.vn[1]= -nor[1];
-       shi.vn[2]= -nor[2];
-       VECCOPY(shi.vno, shi.vn);
-       VECCOPY(shi.facenor, shi.vn);
-       
-       if(ma->texco) {
-               VECCOPY(shi.lo, orco);
-               
-               if(ma->texco & TEXCO_GLOB) {
-                       VECCOPY(shi.gl, shi.lo);
-               }
-               if(ma->texco & TEXCO_WINDOW) {
-                       VECCOPY(shi.winco, shi.lo);
-               }
-               if(ma->texco & TEXCO_STICKY) {
-                       VECCOPY(shi.sticky, shi.lo);
-               }
-               if(ma->texco & TEXCO_OBJECT) {
-                       VECCOPY(shi.co, shi.lo);
-               }
-               if(ma->texco & TEXCO_NORM) {
-                       VECCOPY(shi.orn, shi.vn);
-               }
-               if(ma->texco & TEXCO_REFL) {
-                       float inp= 2.0f * (shi.vn[2]);
-                       shi.ref[0]= (inp*shi.vn[0]);
-                       shi.ref[1]= (inp*shi.vn[1]);
-                       shi.ref[2]= (-1.0f + inp*shi.vn[2]);
-               }
-       }
-       
-       shi.mat= ma;    /* set each time... node shaders change it */
-       RE_shade_external(NULL, &shi, &shr);
-       
-       a= 256.0f*(shr.combined[0]);
-       col1[0]= CLAMPIS(a, 0, 255);
-       a= 256.0f*(shr.combined[1]);
-       col1[1]= CLAMPIS(a, 0, 255);
-       a= 256.0f*(shr.combined[2]);
-       col1[2]= CLAMPIS(a, 0, 255);
-       
-       if(col2) {
-               shi.vn[0]= -shi.vn[0];
-               shi.vn[1]= -shi.vn[1];
-               shi.vn[2]= -shi.vn[2];
-               
-               shi.mat= ma;    /* set each time... node shaders change it */
-               RE_shade_external(NULL, &shi, &shr);
-               
-               a= 256.0f*(shr.combined[0]);
-               col2[0]= CLAMPIS(a, 0, 255);
-               a= 256.0f*(shr.combined[1]);
-               col2[1]= CLAMPIS(a, 0, 255);
-               a= 256.0f*(shr.combined[2]);
-               col2[2]= CLAMPIS(a, 0, 255);
-       }
-}
-
-static void init_fastshade_for_ob(Render *re, Object *ob, int *need_orco_r, float mat[4][4], float imat[3][3])
-{
-       float tmat[4][4];
-       float amb[3]= {0.0f, 0.0f, 0.0f};
-       int a;
-       
-       /* initialize globals in render */
-       RE_shade_external(re, NULL, NULL);
-
-       /* initialize global here */
-       init_fastshade_shadeinput(re);
-       
-       RE_DataBase_GetView(re, tmat);
-       mul_m4_m4m4(mat, ob->obmat, tmat);
-       
-       invert_m4_m4(tmat, mat);
-       copy_m3_m4(imat, tmat);
-       if(ob->transflag & OB_NEG_SCALE) mul_m3_fl(imat, -1.0);
-       
-       if (need_orco_r) *need_orco_r= 0;
-       for(a=0; a<ob->totcol; a++) {
-               Material *ma= give_current_material(ob, a+1);
-               if(ma) {
-                       init_render_material(ma, 0, amb);
-
-                       if(ma->texco & TEXCO_ORCO) {
-                               if (need_orco_r) *need_orco_r= 1;
-                       }
-               }
-       }
-}
-
-static void end_fastshade_for_ob(Object *ob)
-{
-       int a;
-       
-       for(a=0; a<ob->totcol; a++) {
-               Material *ma= give_current_material(ob, a+1);
-               if(ma)
-                       end_render_material(ma);
-       }
-}
-
-
-static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, unsigned int **col1_r, unsigned int **col2_r)
-{
-       Mesh *me= ob->data;
-       DerivedMesh *dm;
-       MVert *mvert;
-       MFace *mface;
-       unsigned int *col1, *col2;
-       float *orco, *vnors, *nors, imat[3][3], mat[4][4], vec[3];
-       int a, i, need_orco, totface, totvert;
-       CustomDataMask dataMask = CD_MASK_BAREMESH | CD_MASK_MCOL
-                                                         | CD_MASK_MTFACE | CD_MASK_NORMAL;
-
-
-       init_fastshade_for_ob(re, ob, &need_orco, mat, imat);
-
-       if(need_orco)
-               dataMask |= CD_MASK_ORCO;
-
-       if (onlyForMesh)
-               dm = mesh_get_derived_deform(RE_GetScene(re), ob, dataMask);
-       else
-               dm = mesh_get_derived_final(RE_GetScene(re), ob, dataMask);
-       
-       mvert = dm->getVertArray(dm);
-       mface = dm->getFaceArray(dm);
-       nors = dm->getFaceDataArray(dm, CD_NORMAL);
-       totvert = dm->getNumVerts(dm);
-       totface = dm->getNumFaces(dm);
-       orco= dm->getVertDataArray(dm, CD_ORCO);
-
-       if (onlyForMesh) {
-               col1 = *col1_r;
-               col2 = NULL;
-       } else {
-               *col1_r = col1 = MEM_mallocN(sizeof(*col1)*totface*4, "col1");
-
-               if (col2_r && (me->flag & ME_TWOSIDED))
-                       col2 = MEM_mallocN(sizeof(*col2)*totface*4, "col2");
-               else
-                       col2 = NULL;
-               
-               if (col2_r) *col2_r = col2;
-       }
-
-               /* vertexnormals */
-       vnors= MEM_mallocN(totvert*3*sizeof(float), "vnors disp");
-       for (a=0; a<totvert; a++) {
-               MVert *mv = &mvert[a];
-               float *vn= &vnors[a*3];
-               float xn= mv->no[0]; 
-               float yn= mv->no[1]; 
-               float zn= mv->no[2];
-               
-                       /* transpose ! */
-               vn[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn;
-               vn[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn;
-               vn[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn;
-               normalize_v3(vn);
-       }               
-
-       for (i=0; i<totface; i++) {
-               MFace *mf= &mface[i];
-               Material *ma= give_current_material(ob, mf->mat_nr+1);
-               int j, vidx[4], nverts= mf->v4?4:3;
-               unsigned char *col1base= (unsigned char*) &col1[i*4];
-               unsigned char *col2base= (unsigned char*) (col2?&col2[i*4]:NULL);
-               float nor[3], n1[3];
-               
-               if(ma==NULL) ma= &defmaterial;
-               
-               vidx[0]= mf->v1;
-               vidx[1]= mf->v2;
-               vidx[2]= mf->v3;
-               vidx[3]= mf->v4;
-
-               if (nors) {
-                       VECCOPY(nor, &nors[i*3]);
-               } else {
-                       if (mf->v4)
-                               normal_quad_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co);
-                       else
-                               normal_tri_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co);
-               }
-
-               n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2];
-               n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2];
-               n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2];
-               normalize_v3(n1);
-
-               for (j=0; j<nverts; j++) {
-                       MVert *mv= &mvert[vidx[j]];
-                       char *col1= (char*)&col1base[j*4];
-                       char *col2= (char*)(col2base?&col2base[j*4]:NULL);
-                       float *vn = (mf->flag & ME_SMOOTH)?&vnors[3*vidx[j]]:n1;
-
-                       mul_v3_m4v3(vec, mat, mv->co);
-
-                       mul_v3_v3fl(vec, vn, 0.001f);
-
-                       fastshade_customdata(&dm->faceData, i, j, ma);
-                       fastshade(vec, vn, orco?&orco[vidx[j]*3]:mv->co, ma, col1, col2);
-               }
-       } 
-       MEM_freeN(vnors);
-
-       dm->release(dm);
-
-       end_fastshade_for_ob(ob);
-}
-
-void shadeMeshMCol(Scene *scene, Object *ob, Mesh *me)
-{
-       Render *re= fastshade_get_render(scene);
-       int a;
-       char *cp;
-       unsigned int *mcol= (unsigned int*)me->mcol;
-       
-       if(re) {
-               mesh_create_shadedColors(re, ob, 1, &mcol, NULL);
-               me->mcol= (MCol*)mcol;
-
-               /* swap bytes */
-               for(cp= (char *)me->mcol, a= 4*me->totface; a>0; a--, cp+=4) {
-                       SWAP(char, cp[0], cp[3]);
-                       SWAP(char, cp[1], cp[2]);
-               }
-       }
-}
-
-/* has base pointer, to check for layer */
-/* called from drawobject.c */
-void shadeDispList(Scene *scene, Base *base)
-{
-       Object *ob= base->object;
-       DispList *dl, *dlob;
-       Material *ma = NULL;
-       Render *re;
-       float imat[3][3], mat[4][4], vec[3];
-       float *fp, *nor, n1[3];
-       unsigned int *col1;
-       int a, need_orco;
-       
-       re= fastshade_get_render(scene);
-       if(re==NULL)
-               return;
-       
-       dl = find_displist(&ob->disp, DL_VERTCOL);
-       if (dl) {
-               BLI_remlink(&ob->disp, dl);
-               free_disp_elem(dl);
-       }
-
-       if(ob->type==OB_MESH) {
-               dl= MEM_callocN(sizeof(DispList), "displistshade");
-               dl->type= DL_VERTCOL;
-
-               mesh_create_shadedColors(re, ob, 0, &dl->col1, &dl->col2);
-
-               /* add dl to ob->disp after mesh_create_shadedColors, because it
-                  might indirectly free ob->disp */
-               BLI_addtail(&ob->disp, dl);
-       }
-       else {
-
-               init_fastshade_for_ob(re, ob, &need_orco, mat, imat);
-               
-               if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
-               
-                       /* now we need the normals */
-                       dl= ob->disp.first;
-                       
-                       while(dl) {
-                               dlob= MEM_callocN(sizeof(DispList), "displistshade");
-                               BLI_addtail(&ob->disp, dlob);
-                               dlob->type= DL_VERTCOL;
-                               dlob->parts= dl->parts;
-                               dlob->nr= dl->nr;
-                               
-                               if(dl->type==DL_INDEX3) {
-                                       col1= dlob->col1= MEM_mallocN(sizeof(int)*dl->nr, "col1");
-                               }
-                               else {
-                                       col1= dlob->col1= MEM_mallocN(sizeof(int)*dl->parts*dl->nr, "col1");
-                               }
-                               
-                       
-                               ma= give_current_material(ob, dl->col+1);
-                               if(ma==NULL) ma= &defmaterial;
-                               
-                               if(dl->type==DL_INDEX3) {
-                                       if(dl->nors) {
-                                               /* there's just one normal */
-                                               n1[0]= imat[0][0]*dl->nors[0]+imat[0][1]*dl->nors[1]+imat[0][2]*dl->nors[2];
-                                               n1[1]= imat[1][0]*dl->nors[0]+imat[1][1]*dl->nors[1]+imat[1][2]*dl->nors[2];
-                                               n1[2]= imat[2][0]*dl->nors[0]+imat[2][1]*dl->nors[1]+imat[2][2]*dl->nors[2];
-                                               normalize_v3(n1);
-                                               
-                                               fp= dl->verts;
-                                               
-                                               a= dl->nr;              
-                                               while(a--) {
-                                                       mul_v3_m4v3(vec, mat, fp);
-                                                       
-                                                       fastshade(vec, n1, fp, ma, (char *)col1, NULL);
-                                                       
-                                                       fp+= 3; col1++;
-                                               }
-                                       }
-                               }
-                               else if(dl->type==DL_SURF) {
-                                       if(dl->nors) {
-                                               a= dl->nr*dl->parts;
-                                               fp= dl->verts;
-                                               nor= dl->nors;
-                                               
-                                               while(a--) {
-                                                       mul_v3_m4v3(vec, mat, fp);
-                                                       
-                                                       n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2];
-                                                       n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2];
-                                                       n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2];
-                                                       normalize_v3(n1);
-                               
-                                                       fastshade(vec, n1, fp, ma, (char *)col1, NULL);
-                                                       
-                                                       fp+= 3; nor+= 3; col1++;
-                                               }
-                                       }
-                               }
-                               dl= dl->next;
-                       }
-               }
-               else if(ob->type==OB_MBALL) {
-                       /* there are normals already */
-                       dl= ob->disp.first;
-                       
-                       while(dl) {
-                               
-                               if(dl->type==DL_INDEX4) {
-                                       if(dl->nors) {
-                                               if(dl->col1) MEM_freeN(dl->col1);
-                                               col1= dl->col1= MEM_mallocN(sizeof(int)*dl->nr, "col1");
-                               
-                                               ma= give_current_material(ob, dl->col+1);
-                                               if(ma==NULL) ma= &defmaterial;
-                                               
-                                               fp= dl->verts;
-                                               nor= dl->nors;
-                                               
-                                               a= dl->nr;              
-                                               while(a--) {
-                                                       mul_v3_m4v3(vec, mat, fp);
-                                                       
-                                                       /* transpose ! */
-                                                       n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2];
-                                                       n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2];
-                                                       n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2];
-                                                       normalize_v3(n1);
-                                               
-                                                       fastshade(vec, n1, fp, ma, (char *)col1, NULL);
-                                                       
-                                                       fp+= 3; col1++; nor+= 3;
-                                               }
-                                       }
-                               }
-                               dl= dl->next;
-                       }
-               }
-               
-               end_fastshade_for_ob(ob);
-       }
-}
-
-/* frees render and shade part of displists */
-/* note: dont do a shade again, until a redraw happens */
-void reshadeall_displist(Scene *scene)
-{
-       Base *base;
-       Object *ob;
-       
-       fastshade_free_render();
-       
-       for(base= scene->base.first; base; base= base->next) {
-               ob= base->object;
-
-               if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
-                       freedisplist(&ob->disp);
-
-               if(base->lay & scene->lay) {
-                       /* Metaballs have standard displist at the Object */
-                       if(ob->type==OB_MBALL) shadeDispList(scene, base);
-               }
-       }
-}
-
 /* ****************** make displists ********************* */
 
 static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, int forRender)
index 3a8a2ae..64e374f 100644 (file)
  */
 
 
-#ifdef WITH_PYTHON
-#include <Python.h>
+#if 0 /* pynodes commented for now */
+#  ifdef WITH_PYTHON
+#    include <Python.h>
+#  endif
 #endif
 
 #include "MEM_guardedalloc.h"
index 16fa160..dff62b0 100644 (file)
@@ -2641,11 +2641,12 @@ void object_handle_update(Scene *scene, Object *ob)
 
 #else                          /* ensure CD_MASK_BAREMESH for now */
                                        EditMesh *em = (ob == scene->obedit)? BKE_mesh_get_editmesh(ob->data): NULL;
+                                       unsigned int data_mask= scene->customdata_mask | ob->customdata_mask | CD_MASK_BAREMESH;
                                        if(em) {
-                                               makeDerivedMesh(scene, ob, em,  scene->customdata_mask | CD_MASK_BAREMESH); /* was CD_MASK_BAREMESH */
+                                               makeDerivedMesh(scene, ob, em,  data_mask); /* was CD_MASK_BAREMESH */
                                                BKE_mesh_end_editmesh(ob->data, em);
                                        } else
-                                               makeDerivedMesh(scene, ob, NULL, scene->customdata_mask | CD_MASK_BAREMESH);
+                                               makeDerivedMesh(scene, ob, NULL, data_mask);
 #endif
 
                                }
index 0c25da3..c684834 100644 (file)
@@ -137,7 +137,7 @@ set(SRC
 )
 
 if(WITH_BINRELOC)
-       list(APPEND INC_SYS "${BINRELOC_INC}")
+       list(APPEND INC_SYS "${BINRELOC_INCLUDE_DIRS}")
        add_definitions(-DWITH_BINRELOC)
 endif()
 
index 7c9dfc4..b8a7261 100644 (file)
@@ -4321,6 +4321,7 @@ static void direct_link_object(FileData *fd, Object *ob)
                MEM_freeN(hook);
        }
        
+       ob->customdata_mask= 0;
        ob->bb= NULL;
        ob->derivedDeform= NULL;
        ob->derivedFinal= NULL;
index c3aad25..a5af15d 100644 (file)
@@ -50,7 +50,7 @@ set(SRC
 )
 
 if(WITH_CODEC_QUICKTIME)
-       list(APPEND INC_SYS ${QUICKTIME_INC})
+       list(APPEND INC_SYS ${QUICKTIME_INCLUDE_DIRS})
        add_definitions(-DWITH_QUICKTIME)
 endif()
 
index bccc7bd..77cdf88 100644 (file)
@@ -113,9 +113,10 @@ LIBIMPORT void interlace(struct ImBuf *ib);
 LIBIMPORT void IMB_rectcpy(struct ImBuf *dbuf, struct ImBuf *sbuf, 
        int destx, int desty, int srcx, int srcy, int width, int height);
 
-LIBIMPORT void IMB_rectfill(struct ImBuf *drect, float col[4]);
+LIBIMPORT void IMB_rectfill(struct ImBuf *drect, const float col[4]);
 LIBIMPORT void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
 LIBIMPORT void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
+LIBIMPORT void IMB_rectfill_alpha(struct ImBuf *drect, const float value);
 
 #endif /* IFF_H */
 
index 42dbc08..69beac6 100644 (file)
 
 #include <algorithm>
 
-// use this for retrieving bone names, since these must be unique
+// first try node name, if not available (since is optional), fall back to original id
 template<class T>
 static const char *bc_get_joint_name(T *node)
 {
-       const std::string& id = node->getOriginalId();
-       return id.size() ? id.c_str() : node->getName().c_str();
+       const std::string& id = node->getName();
+       return id.size() ? id.c_str() : node->getOriginalId().c_str();
 }
 
 FCurve *AnimationImporter::create_fcurve(int array_index, const char *rna_path)
@@ -1134,7 +1134,8 @@ void AnimationImporter::evaluate_transform_at_frame(float mat[4][4], COLLADAFW::
 
                unit_m4(m);
 
-               if (!evaluate_animation(tm, m, fra, node->getOriginalId().c_str())) {
+               std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId();
+               if (!evaluate_animation(tm, m, fra, nodename.c_str())) {
                        switch (type) {
                        case COLLADAFW::Transformation::ROTATE:
                                dae_rotate_to_mat4(tm, m);
index 262834d..48e0d99 100644 (file)
 
 #include "ArmatureImporter.h"
 
-// use this for retrieving bone names, since these must be unique
+// use node name, or fall back to original id if not present (name is optional)
 template<class T>
 static const char *bc_get_joint_name(T *node)
 {
-       const std::string& id = node->getOriginalId();
-       return id.size() ? id.c_str() : node->getName().c_str();
+       const std::string& id = node->getName();
+       return id.size() ? id.c_str() : node->getOriginalId().c_str();
 }
 
 ArmatureImporter::ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, AnimationImporterBase *anim, Scene *sce) :
index 7c43c09..260dd1a 100644 (file)
@@ -44,19 +44,19 @@ set(INC_SYS
 
 if(APPLE)
        list(APPEND INC_SYS
-               ${OPENCOLLADA_INC}/COLLADAStreamWriter
-               ${OPENCOLLADA_INC}/COLLADABaseUtils
-               ${OPENCOLLADA_INC}/COLLADAFramework
-               ${OPENCOLLADA_INC}/COLLADASaxFrameworkLoader
-               ${OPENCOLLADA_INC}/GeneratedSaxParser 
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADAFramework
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADASaxFrameworkLoader
+               ${OPENCOLLADA_INCLUDE_DIR}/GeneratedSaxParser
        )
 else()
        list(APPEND INC_SYS
-               ${OPENCOLLADA_INC}/COLLADAStreamWriter/include
-               ${OPENCOLLADA_INC}/COLLADABaseUtils/include
-               ${OPENCOLLADA_INC}/COLLADAFramework/include
-               ${OPENCOLLADA_INC}/COLLADASaxFrameworkLoader/include 
-               ${OPENCOLLADA_INC}/GeneratedSaxParser/include 
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter/include
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils/include
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADAFramework/include
+               ${OPENCOLLADA_INCLUDE_DIR}/COLLADASaxFrameworkLoader/include
+               ${OPENCOLLADA_INCLUDE_DIR}/GeneratedSaxParser/include
        )
 endif()
 
index 117479b..14ce9a9 100644 (file)
@@ -310,7 +310,7 @@ Object* DocumentImporter::create_lamp_object(COLLADAFW::InstanceLight *lamp, Sce
        return ob;
 }
 
-Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, bool is_library_node)
+Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, Object *par_ob, bool is_library_node)
 {
        Object *obn = copy_object(source_ob);
        obn->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
@@ -354,10 +354,10 @@ Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
                        Object *new_child = NULL;
                        if (inodes.getCount()) { // \todo loop through instance nodes
                                const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId();
-                               new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, is_library_node);
+                               new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, NULL, is_library_node);
                        }
                        else {
-                               new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, is_library_node);
+                               new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, NULL, is_library_node);
                        }
                        bc_set_parent(new_child, obn, mContext, true);
 
@@ -368,7 +368,12 @@ Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
 
        // when we have an instance_node, don't return the object, because otherwise
        // its correct location gets overwritten in write_node(). Fixes bug #26012.
-       if(instance_node) return NULL;
+       if(instance_node) {
+               if (par_ob && obn)
+                       bc_set_parent(obn, par_ob, mContext);
+               return NULL;
+       }
+
        else return obn;
 }
 
@@ -393,11 +398,11 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren
                COLLADAFW::InstanceLightPointerArray &lamp = node->getInstanceLights();
                COLLADAFW::InstanceControllerPointerArray &controller = node->getInstanceControllers();
                COLLADAFW::InstanceNodePointerArray &inst_node = node->getInstanceNodes();
-               int geom_done = 0;
-               int camera_done = 0;
-               int lamp_done = 0;
-               int controller_done = 0;
-               int inst_done = 0;
+               size_t geom_done = 0;
+               size_t camera_done = 0;
+               size_t lamp_done = 0;
+               size_t controller_done = 0;
+               size_t inst_done = 0;
 
                // XXX linking object with the first <instance_geometry>, though a node may have more of them...
                // maybe join multiple <instance_...> meshes into 1, and link object with it? not sure...
@@ -431,7 +436,7 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren
                                Object *source_ob = object_map[node_id];
                                COLLADAFW::Node *source_node = node_map[node_id];
 
-                               ob = create_instance_node(source_ob, source_node, node, sce, is_library_node);
+                               ob = create_instance_node(source_ob, source_node, node, sce, par, is_library_node);
                        }
                        ++inst_done;
                }
@@ -444,7 +449,8 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren
                // check if object is not NULL
                if (!ob) return;
                
-               rename_id(&ob->id, (char*)node->getOriginalId().c_str());
+               std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId();
+               rename_id(&ob->id, (char*)nodename.c_str());
 
                object_map[node->getUniqueId()] = ob;
                node_map[node->getUniqueId()] = node;
@@ -526,7 +532,7 @@ bool DocumentImporter::writeMaterial( const COLLADAFW::Material* cmat )
        if(mImportStage!=General)
                return true;
                
-       const std::string& str_mat_id = cmat->getOriginalId();
+       const std::string& str_mat_id = cmat->getName().size() ? cmat->getName() : cmat->getOriginalId();
        Material *ma = add_material((char*)str_mat_id.c_str());
        
        this->uid_effect_map[cmat->getInstantiatedEffect()] = ma;
@@ -678,6 +684,18 @@ void DocumentImporter::write_profile_COMMON(COLLADAFW::EffectCommon *ef, Materia
                        i++;
                }
        }
+       
+       if(ef->getOpacity().isTexture()) {
+               COLLADAFW::Texture ctex = ef->getOpacity().getTexture();
+               mtex = create_texture(ef, ctex, ma, i, texindex_texarray_map);
+               if(mtex != NULL) {
+                       mtex->mapto = MAP_ALPHA;
+                       mtex->tex->imaflag |= TEX_USEALPHA;
+                       i++;
+                       ma->spectra = ma->alpha = 0;
+                       ma->mode |= MA_ZTRANSP|MA_TRANSP;
+               }
+       }
        // TRANSPARENT
        // color
 //     if (ef->getOpacity().isColor()) {
index e57d621..5ccec53 100644 (file)
@@ -72,7 +72,7 @@ public:
        /** these should not be here */
        Object* create_camera_object(COLLADAFW::InstanceCamera*, Scene*);
        Object* create_lamp_object(COLLADAFW::InstanceLight*, Scene*);
-       Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, bool);
+       Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
        void write_node(COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
        MTex* create_texture(COLLADAFW::EffectCommon*, COLLADAFW::Texture&, Material*, int, TexIndexTextureArrayMap&);
        void write_profile_COMMON(COLLADAFW::EffectCommon*, Material*);
index 12ccf77..13eb62c 100644 (file)
@@ -67,7 +67,7 @@ void LightsExporter::operator()(Object *ob)
        std::string la_id(get_light_id(ob));
        std::string la_name(id_name(la));
        COLLADASW::Color col(la->r * la->energy, la->g * la->energy, la->b * la->energy);
-       float e, d, constatt, linatt, quadatt;
+       float d, constatt, linatt, quadatt;
        
        d = la->dist;
        
@@ -84,7 +84,7 @@ void LightsExporter::operator()(Object *ob)
        
        // sun
        if (la->type == LA_SUN) {
-               COLLADASW::DirectionalLight cla(mSW, la_id, la_name, e);
+               COLLADASW::DirectionalLight cla(mSW, la_id, la_name);
                cla.setColor(col);
                cla.setConstantAttenuation(constatt);
                exportBlenderProfile(cla, la);
@@ -92,7 +92,7 @@ void LightsExporter::operator()(Object *ob)
        }
        // hemi
        else if (la->type == LA_HEMI) {
-               COLLADASW::AmbientLight cla(mSW, la_id, la_name, e);
+               COLLADASW::AmbientLight cla(mSW, la_id, la_name);
                cla.setColor(col);
                cla.setConstantAttenuation(constatt);
                exportBlenderProfile(cla, la);
@@ -100,7 +100,7 @@ void LightsExporter::operator()(Object *ob)
        }
        // spot
        else if (la->type == LA_SPOT) {
-               COLLADASW::SpotLight cla(mSW, la_id, la_name, e);
+               COLLADASW::SpotLight cla(mSW, la_id, la_name);
                cla.setColor(col);
                cla.setFallOffAngle(la->spotsize);
                cla.setFallOffExponent(la->spotblend);
@@ -112,7 +112,7 @@ void LightsExporter::operator()(Object *ob)
        }
        // lamp
        else if (la->type == LA_LOCAL) {
-               COLLADASW::PointLight cla(mSW, la_id, la_name, e);
+               COLLADASW::PointLight cla(mSW, la_id, la_name);
                cla.setColor(col);
                cla.setConstantAttenuation(constatt);
                cla.setLinearAttenuation(linatt);
@@ -123,7 +123,7 @@ void LightsExporter::operator()(Object *ob)
        // area lamp is not supported
        // it will be exported as a local lamp
        else {
-               COLLADASW::PointLight cla(mSW, la_id, la_name, e);
+               COLLADASW::PointLight cla(mSW, la_id, la_name);
                cla.setColor(col);
                cla.setConstantAttenuation(constatt);
                cla.setLinearAttenuation(linatt);
index b657685..d1977d1 100644 (file)
@@ -62,7 +62,7 @@ extern "C" {
 #include "MeshImporter.h"
 #include "collada_utils.h"
 
-// works for COLLADAFW::Node, COLLADAFW::Geometry
+// get node name, or fall back to original id if not present (name is optional)
 template<class T>
 static const char *bc_get_dae_name(T *node)
 {
@@ -755,9 +755,11 @@ MTex *MeshImporter::assign_textures_to_uvlayer(COLLADAFW::TextureCoordinateBindi
                                                                 MTex *color_texture)
 {
        const COLLADAFW::TextureMapId texture_index = ctexture.getTextureMapId();
-       const size_t setindex = ctexture.getSetIndex();
+       size_t setindex = ctexture.getSetIndex();
        std::string uvname = ctexture.getSemantic();
        
+       if(setindex==-1) return NULL;
+       
        const CustomData *data = &me->fdata;
        int layer_index = CustomData_get_layer_index(data, CD_MTFACE);
        CustomDataLayer *cdl = &data->layers[layer_index+setindex];
@@ -833,7 +835,6 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
        if (*color_texture &&
                strlen((*color_texture)->uvname) &&
                strcmp(layername, (*color_texture)->uvname) != 0) {
-               
                texture_face = (MTFace*)CustomData_get_layer_named(&me->fdata, CD_MTFACE,
                                                                                                                   (*color_texture)->uvname);
                strcpy(layername, (*color_texture)->uvname);
@@ -903,7 +904,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
        uid_object_map[*geom_uid] = ob;
        
        // name Object
-       const std::string& id = node->getOriginalId();
+       const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId();
        if (id.length())
                rename_id(&ob->id, (char*)id.c_str());
        
@@ -915,6 +916,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
        if (old_mesh->id.us == 0) free_libblock(&G.main->mesh, old_mesh);
        
        char layername[100];
+       layername[0] = '\0';
        MTFace *texture_face = NULL;
        MTex *color_texture = NULL;
        
@@ -957,7 +959,7 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
                return true;
        }
        
-       const std::string& str_geom_id = mesh->getOriginalId();
+       const std::string& str_geom_id = mesh->getName().size() ? mesh->getName() : mesh->getOriginalId();
        Mesh *me = add_mesh((char*)str_geom_id.c_str());
 
        // store the Mesh pointer to link it later with an Object
index 6be9769..ce0d561 100644 (file)
 #include "SkinInfo.h"
 #include "collada_utils.h"
 
-// use this for retrieving bone names, since these must be unique
+// use name, or fall back to original id if name not present (name is optional)
 template<class T>
 static const char *bc_get_joint_name(T *node)
 {
-       const std::string& id = node->getOriginalId();
-       return id.size() ? id.c_str() : node->getName().c_str();
+       const std::string& id = node->getName();
+       return id.size() ? id.c_str() : node->getOriginalId().c_str();
 }
 
 // This is used to store data passed in write_controller_data.
index 4f4d16d..9cb6a22 100644 (file)
@@ -265,7 +265,7 @@ std::string get_light_id(Object *ob)
 
 std::string get_joint_id(Bone *bone, Object *ob_arm)
 {
-       return translate_id(id_name(ob_arm) + "_" + bone->name);
+       return translate_id(bone->name);
 }
 
 std::string get_camera_id(Object *ob)
index 1121eb5..dce7ee2 100644 (file)
 /* DataToC output of file <startup_blend> */
 
-int datatoc_startup_blend_size= 349868;
+int datatoc_startup_blend_size= 375912;
 char datatoc_startup_blend[]= {
- 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 53, 55,
- 82, 69, 78, 68, 32,  0,  0,  0,240,236,191, 95,255,127,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  0,250,  0,  0,  0,
- 83, 99,101,110,101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 71, 76, 79, 66, 32,  1,  0,  0,
-240,235,191, 95,255,127,  0,  0,199,  0,  0,  0,  1,  0,  0,  0, 32, 32, 32, 49,  1,  0,  0,  0,250,  0,  0,  0,  1,  0,  0,  1,
- 40, 54, 45, 21,  1,  0,  0,  0, 56,174, 47,  4,  1,  0,  0,  0,  0, 16,  0,  0,128, 32,  4,  0,162,144,  0,  0,  0,  0,  0,  0,
- 60,109,101,109,111,114,121, 50, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 66, 76, 69, 78, 68, 69, 82, 45,
+118, 50, 53, 55, 82, 69, 78, 68, 32,  0,  0,  0,  0,112,125, 82,255,127,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  0,
+250,  0,  0,  0, 83, 99,101,110,101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 71, 76, 79, 66,
+ 32,  1,  0,  0, 16,111,125, 82,255,127,  0,  0,199,  0,  0,  0,  1,  0,  0,  0, 32, 32, 32, 49,  1,  0,  0,  0,250,  0,  0,  0,
+  1,  0,  0,  1, 72, 17, 30,  2,  0,  0,  0,  0,152,219, 31,  2,  0,  0,  0,  0,  0, 16,  0,  0,128, 32,  4,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 87, 77,  0,  0, 24,  1,  0,  0,200,136, 44, 21,  1,  0,  0,  0,
-106,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 87, 77, 87,105,110, 77, 97,110,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 40,138, 44, 21,  1,  0,  0,  0, 40,138, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  2,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 87, 77,  0,  0, 24,  1,  0,  0,152,101, 29,  2,
+  0,  0,  0,  0,106,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 87, 77, 87,105,110, 77, 97,110,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,102, 29,  2,  0,  0,  0,  0,248,102, 29,  2,
+  0,  0,  0,  0,248,102, 29,  2,  0,  0,  0,  0,248,102, 29,  2,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,134, 61,  3,
+  0,  0,  0,  0,248, 14,187,  3,  0,  0,  0,  0, 16,  0,  0,  0,  2,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0, 72,126,181,  3,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 88, 79, 20,  2,  0,  0,  0,  0, 88, 79, 20,  2,
+  0,  0,  0,  0, 88, 79, 20,  2,  0,  0,  0,  0, 72, 80, 20,  2,  0,  0,  0,  0, 72,126,181,  3,  0,  0,  0,  0, 72, 80, 20,  2,
+  0,  0,  0,  0, 68, 65, 84, 65,224,  0,  0,  0,248,102, 29,  2,  0,  0,  0,  0,107,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 80, 20,  2,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 72, 17, 30,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115, 99,114,101,101,110,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 29,  0,126,  7,  5,  4,  0,  0,  0,  0,  1,  0,238,  3,  0,  0,  0,  0,
+  1,  0,  0,  0,104, 46, 68,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,
+  0,  0,  0,  0, 72, 70,  2,  2,  0,  0,  0,  0,  8, 52,119,  3,  0,  0,  0,  0,  8, 52,119,  3,  0,  0,  0,  0, 40, 47, 68,  2,
+  0,  0,  0,  0,168,  2, 68,  2,  0,  0,  0,  0, 56,  4, 68,  2,  0,  0,  0,  0, 56,  4, 68,  2,  0,  0,  0,  0,216,254,190,  3,
+  0,  0,  0,  0,152,255, 77,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 83, 78,  0,  0,
+216,  0,  0,  0, 40,104, 29,  2,  0,  0,  0,  0,193,  0,  0,  0,  1,  0,  0,  0,184,184, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 83, 82, 65,110,105,109, 97,116,105,111,110,  0,
+ 46, 48, 48, 49,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,105, 29,  2,
+  0,  0,  0,  0,184,112, 29,  2,  0,  0,  0,  0, 40,113, 29,  2,  0,  0,  0,  0,104,125, 29,  2,  0,  0,  0,  0,216,125, 29,  2,
+  0,  0,  0,  0, 40,175, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,219, 31,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,232,216,159,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0, 72,105, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,
+  1,  0,  0,  0,184,105, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,184,105, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0, 40,106, 29,  2,
+  0,  0,  0,  0, 72,105, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  4,  0,  0,  0,  0, 68, 65, 84, 65,
+ 32,  0,  0,  0, 40,106, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,152,106, 29,  2,  0,  0,  0,  0,184,105, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  7,  5,  4,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,152,106, 29,  2,
+  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0, 40,106, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,126,  7,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,
+  1,  0,  0,  0,120,107, 29,  2,  0,  0,  0,  0,152,106, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,234,  3,
+  1,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,120,107, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,232,107, 29,  2,
+  0,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  7,234,  3,  1,  0,  0,  0, 68, 65, 84, 65,
+ 32,  0,  0,  0,232,107, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0,120,107, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,  6,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0, 88,108, 29,  2,
+  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0,232,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 52,  6,234,  3,  1,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,
+  1,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,  6,184,  1,
+  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,168,109, 29,  2,
+  0,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  7,184,  1,  0,  0,  0,  0, 68, 65, 84, 65,
+ 32,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0, 56,109, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0, 24,110, 29,  2,
+  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 52,  6,124,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,
+  1,  0,  0,  0,248,110, 29,  2,  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,164,  2,124,  0,
+  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,248,110, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,104,111, 29,  2,
+  0,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,164,  2,234,  3,  1,  0,  0,  0, 68, 65, 84, 65,
+ 32,  0,  0,  0,104,111, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,216,111, 29,  2,  0,  0,  0,  0,248,110, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,108,  1,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,216,111, 29,  2,
+  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,104,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,164,  2,108,  1,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,
+  1,  0,  0,  0,184,112, 29,  2,  0,  0,  0,  0,216,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,  6, 32,  3,
+  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,184,112, 29,  2,  0,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  7, 32,  3,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 40,113, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,152,113, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,184,105, 29,  2,  0,  0,  0,  0, 40,106, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,152,113, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,  8,114, 29,  2,  0,  0,  0,  0, 40,113, 29,  2,
+  0,  0,  0,  0,184,105, 29,  2,  0,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,  8,114, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,120,114, 29,  2,  0,  0,  0,  0,152,113, 29,  2,
+  0,  0,  0,  0, 40,106, 29,  2,  0,  0,  0,  0,120,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,120,114, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,232,114, 29,  2,  0,  0,  0,  0,  8,114, 29,  2,
+  0,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,120,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,232,114, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 88,115, 29,  2,  0,  0,  0,  0,120,114, 29,  2,
+  0,  0,  0,  0, 72,105, 29,  2,  0,  0,  0,  0,232,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 88,115, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,200,115, 29,  2,  0,  0,  0,  0,232,114, 29,  2,
+  0,  0,  0,  0,152,106, 29,  2,  0,  0,  0,  0,232,107, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,200,115, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 56,116, 29,  2,  0,  0,  0,  0, 88,115, 29,  2,
+  0,  0,  0,  0,120,107, 29,  2,  0,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 56,116, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,168,116, 29,  2,  0,  0,  0,  0,200,115, 29,  2,
+  0,  0,  0,  0,232,107, 29,  2,  0,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,168,116, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 24,117, 29,  2,  0,  0,  0,  0, 56,116, 29,  2,
+  0,  0,  0,  0,152,106, 29,  2,  0,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 24,117, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,136,117, 29,  2,  0,  0,  0,  0,168,116, 29,  2,
+  0,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,136,117, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,248,117, 29,  2,  0,  0,  0,  0, 24,117, 29,  2,
+  0,  0,  0,  0, 72,105, 29,  2,  0,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,248,117, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,104,118, 29,  2,  0,  0,  0,  0,136,117, 29,  2,
+  0,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,104,118, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,216,118, 29,  2,  0,  0,  0,  0,248,117, 29,  2,
+  0,  0,  0,  0,232,107, 29,  2,  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,216,118, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 72,119, 29,  2,  0,  0,  0,  0,104,118, 29,  2,
+  0,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 72,119, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,184,119, 29,  2,  0,  0,  0,  0,216,118, 29,  2,
+  0,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,184,119, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 40,120, 29,  2,  0,  0,  0,  0, 72,119, 29,  2,
+  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 40,120, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,152,120, 29,  2,  0,  0,  0,  0,184,119, 29,  2,
+  0,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,248,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,152,120, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,  8,121, 29,  2,  0,  0,  0,  0, 40,120, 29,  2,
+  0,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0,248,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,  8,121, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,120,121, 29,  2,  0,  0,  0,  0,152,120, 29,  2,
+  0,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,248,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,120,121, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,232,121, 29,  2,  0,  0,  0,  0,  8,121, 29,  2,
+  0,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0,104,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,232,121, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 88,122, 29,  2,  0,  0,  0,  0,120,121, 29,  2,
+  0,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,216,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 88,122, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,200,122, 29,  2,  0,  0,  0,  0,232,121, 29,  2,
+  0,  0,  0,  0,104,111, 29,  2,  0,  0,  0,  0,216,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,200,122, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 56,123, 29,  2,  0,  0,  0,  0, 88,122, 29,  2,
+  0,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 56,123, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,168,123, 29,  2,  0,  0,  0,  0,200,122, 29,  2,
+  0,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,168,123, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 24,124, 29,  2,  0,  0,  0,  0, 56,123, 29,  2,
+  0,  0,  0,  0,120,107, 29,  2,  0,  0,  0,  0,184,112, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0, 24,124, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,136,124, 29,  2,  0,  0,  0,  0,168,123, 29,  2,
+  0,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0,184,112, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,136,124, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,248,124, 29,  2,  0,  0,  0,  0, 24,124, 29,  2,
+  0,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,184,112, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,248,124, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,104,125, 29,  2,  0,  0,  0,  0,136,124, 29,  2,
+  0,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,104,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  0,  0,  0,104,125, 29,  2,  0,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,124, 29,  2,
+  0,  0,  0,  0,248,110, 29,  2,  0,  0,  0,  0,216,111, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+160,  0,  0,  0,216,125, 29,  2,  0,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,168,129, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  8,107, 29,  2,  0,  0,  0,  0,184,105, 29,  2,  0,  0,  0,  0, 40,106, 29,  2,  0,  0,  0,  0,120,107, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  7,  0,  0,235,  3,  0,  0,  5,  4,  0,  0,  7,  7,127,  7,
+ 27,  0,  1,  0,  0,  0,  0,  0,  7,  0,  0,  0,216,  3,  3,  2,  0,  0,  0,  0, 40,184, 29,  2,  0,  0,  0,  0, 40,184, 29,  2,
+  0,  0,  0,  0,200,126, 29,  2,  0,  0,  0,  0, 56,128, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,104,163,166,  3,  0,  0,  0,  0,184,135, 61,  3,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,200,126, 29,  2,
+  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0, 56,128, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 32,148, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,224,239, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+126,  7,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,192,239, 68,  0,  0,200, 65,  0,192,239, 68,  0,  0,200, 65,  0,  0,128, 63,
+  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  0, 10,  0,127,  7, 26,  0,127,  7, 26,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  7,  0,  0,235,  3,  0,  0,  4,  4,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  7, 26,  0,  0,  0,  1,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,232,  5,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0, 56,128, 29,  2,
+  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,126, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,240,109, 69,  0,  0,128,192,  0,  0,  0,  0,  0,  0,  0,  0,255,255,109, 69,  0,  0,  0,192,  0,  0,  0,  0,112,  7,  0,  0,
+129,  7,  0,  0, 18,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,111,  7,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,
+111,  7,  0,  0, 18,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 63,
+  0,  0,128, 63,  2,  0,  0,  0,  1,  0,  3,  3,  2,  0,  0,  4, 10,  0,129,  7,  2,  0,112,  7,  1,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  4,  0,  0,  5,  4,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  4,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,168,129, 29,  2,
+  0,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,184,134, 29,  2,  0,  0,  0,  0,216,125, 29,  2,  0,  0,  0,  0,232,107, 29,  2,
+  0,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0,152,106, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 53,  6,  0,  0,126,  7,  0,  0,  0,  0,  0,  0,183,  1,  0,  0,  4,  4, 74,  1,184,  1,  1,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,120,255,  2,  2,  0,  0,  0,  0,120,133, 29,  2,  0,  0,  0,  0,120,133, 29,  2,  0,  0,  0,  0,152,130, 29,  2,
+  0,  0,  0,  0,  8,132, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,  7,180,  3,
+  0,  0,  0,  0,120, 62,166,  3,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,152,130, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,
+  1,  0,  0,  0,  8,132, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,148, 67,  0,  0,  0,  0,
+  0,  0,208, 65,  0,  0,  0,  0,  0,  0,165, 67,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 73,  1,  0,  0,  0,  0,  0,  0,
+ 25,  0,  0,  0,  0,128,164, 67,  0,  0,200, 65,  0,128,164, 67,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,
+  2,  0,  3,  3,  4,  0, 12,  0, 10,  0, 74,  1, 26,  0, 74,  1, 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 53,  6,  0,  0,126,  7,  0,  0,158,  1,  0,  0,183,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 74,  1, 26,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,232,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,  8,132, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,
+  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,130, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,165, 67,  0,  0, 61,196,
+  0,  0,  0,  0,  0,  0,  0,  0,  1,128,156, 67,  1,  0,207,195,  0,  0,  0,  0, 57,  1,  0,  0, 74,  1,  0,  0,  0,  0,  0,  0,
+157,  1,  0,  0,  0,  0,  0,  0, 62,  1,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0, 56,  1,  0,  0,  0,  0,  0,  0,
+157,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  1,  0,  0,
+  1,  0,  7,  0, 18,  0,  0,  4,  6,  0, 74,  1,158,  1, 57,  1,158,  1,  0,  0, 56, 93,184,  3,  0,  0,  0,  0,  1,  0,  0,  0,
+  0,  0,  0,  0, 53,  6,  0,  0,126,  7,  0,  0,  0,  0,  0,  0,157,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 74,  1,158,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,152,  0,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 23, 75,  3,
+  0,  0,  0,  0,104,151, 78,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 88,  1,  0,  0, 24, 23, 75,  3,  0,  0,  0,  0,196,  0,  0,  0,
+  1,  0,  0,  0,104, 50,185,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  1,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 67,111,110,116,101,120,116,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,220,255, 57,  1, 36,  0,  0,  0,  0,  0,  0,  0, 38,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,232, 65,145,  3,  0,  0,  0,  0,
- 68, 65, 84, 65,224,  0,  0,  0, 40,138, 44, 21,  1,  0,  0,  0,107,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 40, 54, 45, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,115, 99,114,101,101,110,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,238,  3,  0,  0,  0,  0,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,255,255,255,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 88,  1,  0,  0,104, 50,185,  3,  0,  0,  0,  0,196,  0,  0,  0,  1,  0,  0,  0,248, 60, 89,  3,  0,  0,  0,  0, 24, 23, 75,  3,
+  0,  0,  0,  0,168, 53,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,
+110,100,101,114,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,
+110,100,101,114,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82,101,110,100,101,114,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 83, 78,  0,  0,216,  0,  0,  0,
- 72,139, 44, 21,  1,  0,  0,  0,193,  0,  0,  0,  1,  0,  0,  0,248,236, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 83, 82, 65,110,105,109, 97,116,105,111,110,  0, 46, 48, 48, 49,
-  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,140, 44, 21,  1,  0,  0,  0,
-200,146, 44, 21,  1,  0,  0,  0, 40,147, 44, 21,  1,  0,  0,  0,104,159, 44, 21,  1,  0,  0,  0,216,159, 44, 21,  1,  0,  0,  0,
-152,227, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,174, 47,  4,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,135,255, 57,  1, 61,  0,  0,  0,  0,  0,
+  0,  0,  6,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,104,140, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,
-200,140, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 32,  0,  0,  0,200,140, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0, 40,141, 44, 21,  1,  0,  0,  0,
-104,140, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,  4,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,
- 40,141, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,136,141, 44, 21,  1,  0,  0,  0,200,140, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,118,  7, 97,  4,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,136,141, 44, 21,  1,  0,  0,  0,
-194,  0,  0,  0,  1,  0,  0,  0,232,141, 44, 21,  1,  0,  0,  0, 40,141, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-118,  7,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,232,141, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,
- 72,142, 44, 21,  1,  0,  0,  0,136,141, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 70,  4,  1,  0,  0,  0,
- 68, 65, 84, 65, 32,  0,  0,  0, 72,142, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,168,142, 44, 21,  1,  0,  0,  0,
-232,141, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,118,  7, 70,  4,  1,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,
-168,142, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,  8,143, 44, 21,  1,  0,  0,  0, 72,142, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 44,  6,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,  8,143, 44, 21,  1,  0,  0,  0,
-194,  0,  0,  0,  1,  0,  0,  0,104,143, 44, 21,  1,  0,  0,  0,168,142, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 44,  6, 70,  4,  1,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,104,143, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,
-200,143, 44, 21,  1,  0,  0,  0,  8,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,  6,220,  1,  0,  0,  0,  0,
- 68, 65, 84, 65, 32,  0,  0,  0,200,143, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0, 40,144, 44, 21,  1,  0,  0,  0,
-104,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,118,  7,220,  1,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,
- 40,144, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,200,143, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,132,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,
-194,  0,  0,  0,  1,  0,  0,  0,232,144, 44, 21,  1,  0,  0,  0, 40,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 44,  6,132,  0,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,232,144, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,
- 72,145, 44, 21,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  2,132,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 32,  0,  0,  0, 72,145, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,168,145, 44, 21,  1,  0,  0,  0,
-232,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  2, 70,  4,  1,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,
-168,145, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,  8,146, 44, 21,  1,  0,  0,  0, 72,145, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,  1,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,  8,146, 44, 21,  1,  0,  0,  0,
-194,  0,  0,  0,  1,  0,  0,  0,104,146, 44, 21,  1,  0,  0,  0,168,145, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-160,  2,140,  1,  0,  0,  0,  0, 68, 65, 84, 65, 32,  0,  0,  0,104,146, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,
-200,146, 44, 21,  1,  0,  0,  0,  8,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,  6,100,  3,  0,  0,  0,  0,
- 68, 65, 84, 65, 32,  0,  0,  0,200,146, 44, 21,  1,  0,  0,  0,194,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-104,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,118,  7,100,  3,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 40,147, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,152,147, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-200,140, 44, 21,  1,  0,  0,  0, 40,141, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-152,147, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,  8,148, 44, 21,  1,  0,  0,  0, 40,147, 44, 21,  1,  0,  0,  0,
-200,140, 44, 21,  1,  0,  0,  0,232,141, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-  8,148, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,120,148, 44, 21,  1,  0,  0,  0,152,147, 44, 21,  1,  0,  0,  0,
- 40,141, 44, 21,  1,  0,  0,  0, 72,142, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-120,148, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,232,148, 44, 21,  1,  0,  0,  0,  8,148, 44, 21,  1,  0,  0,  0,
-232,141, 44, 21,  1,  0,  0,  0, 72,142, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-232,148, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 88,149, 44, 21,  1,  0,  0,  0,120,148, 44, 21,  1,  0,  0,  0,
-104,140, 44, 21,  1,  0,  0,  0,168,142, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 88,149, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,200,149, 44, 21,  1,  0,  0,  0,232,148, 44, 21,  1,  0,  0,  0,
-136,141, 44, 21,  1,  0,  0,  0,168,142, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-200,149, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 56,150, 44, 21,  1,  0,  0,  0, 88,149, 44, 21,  1,  0,  0,  0,
- 72,142, 44, 21,  1,  0,  0,  0,  8,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 56,150, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,168,150, 44, 21,  1,  0,  0,  0,200,149, 44, 21,  1,  0,  0,  0,
-168,142, 44, 21,  1,  0,  0,  0,104,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-168,150, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 24,151, 44, 21,  1,  0,  0,  0, 56,150, 44, 21,  1,  0,  0,  0,
-136,141, 44, 21,  1,  0,  0,  0,200,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 24,151, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,136,151, 44, 21,  1,  0,  0,  0,168,150, 44, 21,  1,  0,  0,  0,
-104,143, 44, 21,  1,  0,  0,  0,200,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-136,151, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,248,151, 44, 21,  1,  0,  0,  0, 24,151, 44, 21,  1,  0,  0,  0,
-104,140, 44, 21,  1,  0,  0,  0, 40,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-248,151, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,104,152, 44, 21,  1,  0,  0,  0,136,151, 44, 21,  1,  0,  0,  0,
-  8,143, 44, 21,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-104,152, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,216,152, 44, 21,  1,  0,  0,  0,248,151, 44, 21,  1,  0,  0,  0,
-168,142, 44, 21,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-216,152, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 72,153, 44, 21,  1,  0,  0,  0,104,152, 44, 21,  1,  0,  0,  0,
- 40,144, 44, 21,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 72,153, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,184,153, 44, 21,  1,  0,  0,  0,216,152, 44, 21,  1,  0,  0,  0,
- 40,144, 44, 21,  1,  0,  0,  0,232,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-184,153, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 40,154, 44, 21,  1,  0,  0,  0, 72,153, 44, 21,  1,  0,  0,  0,
-136,144, 44, 21,  1,  0,  0,  0,232,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 40,154, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,152,154, 44, 21,  1,  0,  0,  0,184,153, 44, 21,  1,  0,  0,  0,
-232,141, 44, 21,  1,  0,  0,  0, 72,145, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-152,154, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,  8,155, 44, 21,  1,  0,  0,  0, 40,154, 44, 21,  1,  0,  0,  0,
-  8,143, 44, 21,  1,  0,  0,  0, 72,145, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-  8,155, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,120,155, 44, 21,  1,  0,  0,  0,152,154, 44, 21,  1,  0,  0,  0,
-232,144, 44, 21,  1,  0,  0,  0, 72,145, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-120,155, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,232,155, 44, 21,  1,  0,  0,  0,  8,155, 44, 21,  1,  0,  0,  0,
- 40,144, 44, 21,  1,  0,  0,  0,168,145, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-232,155, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 88,156, 44, 21,  1,  0,  0,  0,120,155, 44, 21,  1,  0,  0,  0,
-232,144, 44, 21,  1,  0,  0,  0,  8,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 88,156, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,200,156, 44, 21,  1,  0,  0,  0,232,155, 44, 21,  1,  0,  0,  0,
-168,145, 44, 21,  1,  0,  0,  0,  8,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-200,156, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 56,157, 44, 21,  1,  0,  0,  0, 88,156, 44, 21,  1,  0,  0,  0,
-104,143, 44, 21,  1,  0,  0,  0,104,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 56,157, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,168,157, 44, 21,  1,  0,  0,  0,200,156, 44, 21,  1,  0,  0,  0,
-  8,143, 44, 21,  1,  0,  0,  0,104,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-168,157, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0, 24,158, 44, 21,  1,  0,  0,  0, 56,157, 44, 21,  1,  0,  0,  0,
- 72,142, 44, 21,  1,  0,  0,  0,200,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
- 24,158, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,136,158, 44, 21,  1,  0,  0,  0,168,157, 44, 21,  1,  0,  0,  0,
-200,143, 44, 21,  1,  0,  0,  0,200,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-136,158, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,248,158, 44, 21,  1,  0,  0,  0, 24,158, 44, 21,  1,  0,  0,  0,
-104,146, 44, 21,  1,  0,  0,  0,200,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-248,158, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,104,159, 44, 21,  1,  0,  0,  0,136,158, 44, 21,  1,  0,  0,  0,
-232,141, 44, 21,  1,  0,  0,  0,168,145, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  0,  0,  0,
-104,159, 44, 21,  1,  0,  0,  0,195,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,158, 44, 21,  1,  0,  0,  0,
- 72,145, 44, 21,  1,  0,  0,  0,  8,146, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,
-216,159, 44, 21,  1,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,152,163, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-232,141, 44, 21,  1,  0,  0,  0,200,140, 44, 21,  1,  0,  0,  0, 40,141, 44, 21,  1,  0,  0,  0, 72,142, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,118,  7,  0,  0, 71,  4,  0,  0, 97,  4,  0,  0,  7,  7,119,  7, 27,  0,  1,  0,
-  0,  0,  0,  0,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,236, 44, 21,  1,  0,  0,  0,120,236, 44, 21,  1,  0,  0,  0,
-184,160, 44, 21,  1,  0,  0,  0, 40,162, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,184,160, 44, 21,  1,  0,  0,  0,
-198,  0,  0,  0,  1,  0,  0,  0, 40,162, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,148, 68,
-  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,224,238, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,118,  7,  0,  0,
-  0,  0,  0,  0, 25,  0,  0,  0,  0,128,237, 68,  0,  0,200, 65,  0,128,237, 68,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,
-  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  4, 10,  0,119,  7, 26,  0,119,  7, 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,118,  7,  0,  0, 71,  4,  0,  0, 96,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,119,  7, 26,  0,  0,  0,  1,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0, 40,162, 44, 21,  1,  0,  0,  0,
-198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,160, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,240,109, 69,
-  0,  0,128,192,  0,  0,  0,  0,  0,  0,  0,  0,255,255,109, 69,  0,  0,  0,192,  0,  0,  0,  0,112,  7,  0,  0,129,  7,  0,  0,
- 18,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,111,  7,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,111,  7,  0,  0,
- 18,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 63,  0,  0,128, 63,
-  2,  0,  0,  0,  1,  0,  3,  3,  2,  0,  0,  4, 10,  0,129,  7,  2,  0,112,  7,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,  4,  0,  0, 97,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,152,163, 44, 21,  1,  0,  0,  0,
-197,  0,  0,  0,  1,  0,  0,  0, 24,188, 44, 21,  1,  0,  0,  0,216,159, 44, 21,  1,  0,  0,  0,168,142, 44, 21,  1,  0,  0,  0,
-104,143, 44, 21,  1,  0,  0,  0,200,143, 44, 21,  1,  0,  0,  0,136,141, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 45,  6,  0,  0,118,  7,  0,  0,  0,  0,  0,  0,219,  1,  0,  0,  4,  4, 74,  1,220,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,216,186, 44, 21,  1,  0,  0,  0,216,186, 44, 21,  1,  0,  0,  0,120,164, 44, 21,  1,  0,  0,  0,
-232,165, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,120,164, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,
-232,165, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160, 67,  0,  0,  0,  0,  0,  0,208, 65,
-  0,  0,  0,  0,  0,  0,165, 67,  0,  0,  0,  0,  0,  0,248, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 73,  1,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,
-  0,128,137, 67,  0,  0,200, 65,  0,128,137, 67,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,
-  4,  0, 12,  4, 10,  0, 74,  1, 31,  0, 74,  1, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 45,  6,  0,  0,118,  7,  0,  0,189,  1,  0,  0,219,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 74,  1, 31,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,232,165, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,120,164, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,165, 67,  0,128, 86,196,  0,  0,  0,  0,
-  0,  0,  0,  0,  1,128,156, 67,  2,128,222,195,  0,  0,  0,  0, 57,  1,  0,  0, 74,  1,  0,  0,  0,  0,  0,  0,188,  1,  0,  0,
-  0,  0,  0,  0, 62,  1,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0, 56,  1,  0,  0,  0,  0,  0,  0,188,  1,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  1,  0,  0,  1,  0,  7,  0,
- 18,  0,  0,  4,  6,  0, 74,  1,189,  1, 57,  1,189,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 45,  6,  0,  0,118,  7,  0,  0,  0,  0,  0,  0,188,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 74,  1,189,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,248,  0,  0,  0,216,186, 44, 21,  1,  0,  0,  0,162,  0,  0,  0,  1,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 88,  1,  0,  0,248, 60, 89,  3,  0,  0,  0,  0,196,  0,  0,  0,
+  1,  0,  0,  0,136, 67,191,  3,  0,  0,  0,  0,104, 50,185,  3,  0,  0,  0,  0,152, 56,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 76, 97,121,101,114,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,111,255, 57,  1,  0,  0,  0,  0,  0,  0,  4,  0,  6,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  1,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,255, 21,  0,  0,160,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,
- 24,188, 44, 21,  1,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,248,192, 44, 21,  1,  0,  0,  0,152,163, 44, 21,  1,  0,  0,  0,
-104,140, 44, 21,  1,  0,  0,  0, 40,144, 44, 21,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,168,142, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0,  0,  0,  0,  0,131,  0,  0,  0, 15, 15, 44,  6,132,  0,  1,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,216,191, 44, 21,  1,  0,  0,  0,216,191, 44, 21,  1,  0,  0,  0,
-248,188, 44, 21,  1,  0,  0,  0,104,190, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,248,188, 44, 21,  1,  0,  0,  0,
-198,  0,  0,  0,  1,  0,  0,  0,104,190, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,137, 68,
-  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,128,197, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0,
-  0,  0,  0,  0, 25,  0,  0,  0,  0,224,202, 68,  0,  0,200, 65,  0,224,202, 68,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,
-  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  4, 10,  0, 44,  6, 26,  0, 44,  6, 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 44,  6, 26,  0,  0,  0,  1,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 88,  1,  0,  0,136, 67,191,  3,  0,  0,  0,  0,196,  0,  0,  0,  1,  0,  0,  0, 24, 67, 62,  3,  0,  0,  0,  0,248, 60, 89,  3,
+  0,  0,  0,  0,200, 59,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,
+109,101,110,115,105,111,110,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,
+109,101,110,115,105,111,110,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68,105,109,101,110,115,105,111,110,115,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,104,190, 44, 21,  1,  0,  0,  0,
-198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,188, 44, 21,  1,  0,  0,  0,  0,  0, 64,192,  0,  0,126, 67,
-  0,  0,  0,  0,  0,  0, 72, 66,112,189, 17,192,246, 70,125, 67,  0,  0,  0,  0,  0,  0, 72, 66,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0,
- 18,  0,  0,  0,105,  0,  0,  0,  0,  0,128, 63,  0,  0, 72, 66,  0,124,146, 72,  0,  0, 72, 66,205,204,204, 61,  0,  0, 32, 65,
- 72,  0,  0,  0,  0,  0,  0,  2,  4,  0,  0,  4,  8,  0, 44,  6,106,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0, 26,  0,  0,  0,131,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 44,  6,106,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,254, 57,  1,203,  0,  0,  0,  0,  0,
+  0,  0,  6,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,216,  0,  0,  0,216,191, 44, 21,  1,  0,  0,  0,
-173,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 88,  1,  0,  0, 24, 67, 62,  3,  0,  0,  0,  0,196,  0,  0,  0,
+  1,  0,  0,  0,200, 60, 68,  2,  0,  0,  0,  0,136, 67,191,  3,  0,  0,  0,  0,136, 62,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 58,254, 57,  1, 58,  0, 20,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  6,  0,  0,  0,
- 68, 65, 84, 65,160,  0,  0,  0,248,192, 44, 21,  1,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0, 56,199, 44, 21,  1,  0,  0,  0,
- 24,188, 44, 21,  1,  0,  0,  0,104,143, 44, 21,  1,  0,  0,  0,104,146, 44, 21,  1,  0,  0,  0,200,146, 44, 21,  1,  0,  0,  0,
-200,143, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 45,  6,  0,  0,118,  7,  0,  0,221,  1,  0,  0, 99,  3,  0,  0,
-  3,  3, 74,  1,135,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,196, 44, 21,  1,  0,  0,  0,
-184,196, 44, 21,  1,  0,  0,  0,216,193, 44, 21,  1,  0,  0,  0, 72,195, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,
-216,193, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0, 72,195, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,128,244, 67,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,165, 67,  0,  0,  0,  0,  0,  0,208, 65,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0, 73,  1,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,  0, 66, 67,  0,  0,200, 65,  0,  0, 66, 67,  0,  0,200, 65,
-  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  4, 10,  0, 74,  1, 26,  0, 74,  1, 26,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 45,  6,  0,  0,118,  7,  0,  0, 74,  3,  0,  0, 99,  3,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 74,  1, 26,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 88,  1,  0,  0,200, 60, 68,  2,  0,  0,  0,  0,196,  0,  0,  0,  1,  0,  0,  0,104, 62, 68,  2,  0,  0,  0,  0, 24, 67, 62,  3,
+  0,  0,  0,  0,200, 65,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,
+116,105,111,110, 95, 98,108,117,114,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,
+116,105,111,110, 95, 98,108,117,114,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,
+111,110, 32, 66,108,117,114,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,254, 57,  1,  0,  0, 20,  0,  0,  0,
+  4,  0,  6,  0,  0,  0,  0,  0,  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,
- 72,195, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,216,193, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,128,131, 67,  0,  0,228,194,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,156, 67,  0,128,173,195,  0,  0,  0,  0,
- 57,  1,  0,  0, 74,  1,  0,  0, 18,  0,  0,  0,108,  1,  0,  0,  0,  0,  0,  0, 56,  1,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,
-  0,  0,  0,  0, 56,  1,  0,  0, 18,  0,  0,  0,108,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,128, 63,  0,  0,128, 63, 18,  6,  0,  0,  2,  0,  3,  3,  0,  0,  0,  4,  6,  0, 74,  1,109,  1, 57,  1, 91,  1,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 45,  6,  0,  0,118,  7,  0,  0,221,  1,  0,  0, 73,  3,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 74,  1,109,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 88,  1,  0,  0,104, 62, 68,  2,  0,  0,  0,  0,196,  0,  0,  0,
+  1,  0,  0,  0, 24,103, 68,  2,  0,  0,  0,  0,200, 60, 68,  2,  0,  0,  0,  0,200, 74,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 24,  1,  0,  0,
-184,196, 44, 21,  1,  0,  0,  0,166,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 83,104, 97,100,105,110,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 10,254, 57,  1,  0,  0,  0,  0,  0,  0,  4,  0,  6,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 88,  1,  0,  0, 24,103, 68,  2,  0,  0,  0,  0,196,  0,  0,  0,  1,  0,  0,  0,184,104, 68,  2,  0,  0,  0,  0,104, 62, 68,  2,
+  0,  0,  0,  0,168, 76,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
+114,102,111,114,109, 97,110, 99,101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
+114,102,111,114,109, 97,110, 99,101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80,101,114,102,111,114,109, 97,110, 99,101,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,242,253, 57,  1,  0,  0,  0,  0,  0,  0,
+  4,  0,  6,  0,  0,  0,  0,  0,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,120,152,192,  3,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  1,  0,  0,  0, 68, 65, 84, 65, 16,  0,  0,  0,120,152,192,  3,  1,  0,  0,  0,220,  0,  0,  0,  1,  0,  0,  0,
- 14,  0,  0,  0, 14,  0,  0,  0, 24,198, 44, 21,  1,  0,  0,  0, 68, 65, 84, 65,224,  0,  0,  0, 24,198, 44, 21,  1,  0,  0,  0,
-219,  0,  0,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 56,174, 47,  4,  1,  0,  0,  0, 19,  0,  0,  0,  1,  0,  1,  0,
- 56,174, 47,  4,  1,  0,  0,  0, 20,  0,  0,  0,  1,  0,  1,  0, 56,174, 47,  4,  1,  0,  0,  0, 21,  0,  1,  0,  1,  0,  0,  0,
- 56,174, 47,  4,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,136,233, 46, 21,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,
- 56, 40, 54,  4,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,168,246, 46, 21,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,
- 88,239, 46, 21,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,136,244, 46, 21,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,
- 56, 46, 54,  4,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0, 24,229, 46, 21,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,
- 56,182, 47,  4,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0, 72,228, 46, 21,  1,  0,  0,  0, 21,  0,  0,  0,  1,  0,  1,  0,
- 56,174, 47,  4,  1,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0, 56,199, 44, 21,  1,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,
-104,212, 44, 21,  1,  0,  0,  0,248,192, 44, 21,  1,  0,  0,  0,232,144, 44, 21,  1,  0,  0,  0, 72,145, 44, 21,  1,  0,  0,  0,
-  8,143, 44, 21,  1,  0,  0,  0,136,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,161,  2,  0,  0, 43,  6,  0,  0,
-133,  0,  0,  0, 69,  4,  0,  0,  1,  1,139,  3,193,  3,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-232,210, 44, 21,  1,  0,  0,  0,232,210, 44, 21,  1,  0,  0,  0, 24,200, 44, 21,  1,  0,  0,  0,216,205, 44, 21,  1,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 88,  1,  0,  0,184,104, 68,  2,  0,  0,  0,  0,196,  0,  0,  0,
+  1,  0,  0,  0,104,117,  1,  2,  0,  0,  0,  0, 24,103, 68,  2,  0,  0,  0,  0,152, 79,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0, 24,200, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,136,201, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,117, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,192, 98, 68,
-  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,138,  3,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,128,237, 68,  0,  0,200, 65,
-  0,128,237, 68,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  4, 10,  0,139,  3,
- 26,  0,139,  3, 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,161,  2,  0,  0, 43,  6,  0,  0,
-133,  0,  0,  0,158,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,139,  3, 26,  0,  0,  0,  1,  0,
-  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0,136,201, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,248,202, 44, 21,  1,  0,  0,  0,
- 24,200, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 67,  0, 64, 70,196,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 67,
-255,127, 70,196,  0,  0,  0,  0,143,  0,  0,  0,160,  0,  0,  0, 18,  0,  0,  0, 43,  3,  0,  0,  0,  0,  0,  0,142,  0,  0,  0,
-  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,142,  0,  0,  0, 18,  0,  0,  0, 43,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  0,  0,  0,  1,  0,  7,  0, 18,  0,  0,  0,  6,  0,160,  0,
- 44,  3,143,  0, 26,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,161,  2,  0,  0,161,  2,  0,  0,
-159,  0,  0,  0, 69,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,167,  3,  0,  0,  5,  0,
-  3,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,218,253, 57,  1,  0,  0,  0,  0,  0,  0,  4,  0,  6,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0,248,202, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,104,204, 44, 21,  1,  0,  0,  0,
-136,201, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 67,  0,  0,206,194,  0,  0,  0,  0,  0,  0,  0,  0,231,102, 16, 67,
-  0,  0,206,194,  0,  0,  0,  0,143,  0,  0,  0,160,  0,  0,  0, 18,  0,  0,  0,119,  0,  0,  0,  0,  0,  0,  0,142,  0,  0,  0,
-  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,142,  0,  0,  0, 18,  0,  0,  0,119,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  0,  0,  0,  1,  0,  7,  0, 18,  0,  0,  4,  6,  0,160,  0,
-120,  0,143,  0,102,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,161,  2,  0,  0, 43,  6,  0,  0,
-159,  0,  0,  0,159,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  6,  0,
- 34,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 88,  1,  0,  0,104,117,  1,  2,  0,  0,  0,  0,196,  0,  0,  0,  1,  0,  0,  0,  8,119,  1,  2,  0,  0,  0,  0,184,104, 68,  2,
+  0,  0,  0,  0, 88, 83,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116,
+ 97,109,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116,
+ 97,109,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 83,116, 97,109,112,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,194,253, 57,  1,  0,  0, 20,  0,  0,  0,
+  4,  0,  6,  0,  0,  0,  0,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0,104,204, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,216,205, 44, 21,  1,  0,  0,  0,
-248,202, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 35, 67,  0,128, 96,196,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 35, 67,
-  0,128, 96,196,  0,  0,  0,  0,163,  0,  0,  0,180,  0,  0,  0, 18,  0,  0,  0,147,  3,  0,  0,  0,  0,  0,  0,162,  0,  0,  0,
-  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,162,  0,  0,  0, 18,  0,  0,  0,147,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  0,  0,  0,  1,  0,  7,  0, 18,  0,  0,  0,  6,  0,180,  0,
-148,  3,163,  0,130,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 43,  6,  0,  0, 43,  6,  0,  0,
-159,  0,  0,  0, 69,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  4,  0,
-  4,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 88,  1,  0,  0,  8,119,  1,  2,  0,  0,  0,  0,196,  0,  0,  0,
+  1,  0,  0,  0,104,151, 78,  3,  0,  0,  0,  0,104,117,  1,  2,  0,  0,  0,  0,200, 85,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0,216,205, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-104,204, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 79,117,116,112,117,116,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 40,253, 57,  1,130,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0, 10,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,161,  2,  0,  0, 43,  6,  0,  0,
-159,  0,  0,  0, 69,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,139,  3,167,  3,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 88,  1,  0,  0,104,151, 78,  3,  0,  0,  0,  0,196,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,119,  1,  2,
+  0,  0,  0,  0,  8, 93,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,
+107,101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,
+107,101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66, 97,107,101,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,207, 44, 21,  1,  0,  0,  0,
- 68, 65, 84, 65, 96,  3,  0,  0, 72,207, 44, 21,  1,  0,  0,  0,156,  0,  0,  0,  1,  0,  0,  0,107, 82,144, 63,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,140, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 28, 13,128,191,  0,  0,128,191,  0,  0,  0,  0,  0,  0,  0,  0, 74,215, 76,190,  0,  0,  0,  0, 68,239,209, 62, 51,177,205,190,
-184,158, 81, 63,  0,  0,  0,  0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190,  0,  0,  0,  0,162, 84, 89,188,166, 33,101, 63,
- 42, 61,228, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,214,211,111,193,  0,  0,128, 63, 69,239,209, 62, 70,119,105, 63,
-176, 84, 89,188,  0,  0,  0,  0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63,  0,  0,  0,  0,185,158, 81, 63, 35, 44,185,190,
- 43, 61,228, 62,  0,  0,  0,  0,164, 96, 68, 65,111,121,173,192,248,209,213, 64,  0,  0,128, 63, 89,180,236, 62,209,249,224,190,
- 48,180, 81,191,184,158, 81,191, 65,158,131, 63,142,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62, 38, 11,117,188,207,156,122, 63,
-138, 84,228,190, 42, 61,228,190,  0,  0,  0,  0,  0,  0,  0,  0,  9,185,108, 65,214,211,111, 65,211, 48,186, 62, 11, 16, 79, 63,
-144,199, 64,188,  0,  0,135,180,163, 15,188,190,102, 75, 53, 62,223,125, 81, 63,  0,  0,104, 51,207,107,117,194, 81,204,216, 65,
- 40,156,  5,194,136,247,159,192,121, 62,114, 66,214,253,213,193, 94,225,  3, 66,236,  7,160, 64, 68,239,209, 62, 51,177,205,190,
-184,158, 81, 63,  0,  0,  0,  0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190,  0,  0,  0,  0,162, 84, 89,188,166, 33,101, 63,
- 42, 61,228, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,214,211,111,193,  0,  0,128, 63, 89,180,236, 62,209,249,224,190,
- 48,180, 81,191,184,158, 81,191, 65,158,131, 63,142,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62, 38, 11,117,188,207,156,122, 63,
-138, 84,228,190, 42, 61,228,190,  0,  0,  0,  0,  0,  0,  0,  0,  9,185,108, 65,214,211,111, 65, 99,181, 12, 64,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 99,181, 12, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 99,181, 12, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 63, 92, 62, 55, 63, 56,186,224,190,
-237,203,148,190,  3,236,234,190,214,211,111, 65,214,211,111, 65,  0,  0,  0,  0,  0,  0,  0,  0, 14, 43,  0, 59,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,253, 57,  1,  0,  0,  0,  0,  0,  0,
+  4,  0,  7,  0,  0,  0,  0,  0, 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,248,  0,  0,  0,120,133, 29,  2,  0,  0,  0,  0,162,  0,  0,  0,
+  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  1,  0,
+  0,  0,  0,  0, 72,128, 81,  3,  0,  0,  0,  0,255, 21,  0,  0,160,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+160,  0,  0,  0,184,134, 29,  2,  0,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,168,139, 29,  2,  0,  0,  0,  0,168,129, 29,  2,
+  0,  0,  0,  0, 72,105, 29,  2,  0,  0,  0,  0,168,109, 29,  2,  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,232,107, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 51,  6,  0,  0,  0,  0,  0,  0,123,  0,  0,  0, 15, 15, 52,  6,
+124,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,168,212,  2,  2,  0,  0,  0,  0,136,138, 29,  2,  0,  0,  0,  0,136,138, 29,  2,
+  0,  0,  0,  0,168,135, 29,  2,  0,  0,  0,  0, 24,137, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,120,222,176,  3,  0,  0,  0,  0, 72,166,179,  3,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,168,135, 29,  2,
+  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0, 24,137, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 32,140, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,128,198, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 51,  6,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0, 96,198, 68,  0,  0,200, 65,  0, 96,198, 68,  0,  0,200, 65,  0,  0,128, 63,
+  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  0, 10,  0, 52,  6, 26,  0, 52,  6, 26,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 51,  6,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,  6, 26,  0,  0,  0,  1,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,214,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,128, 63, 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66,  0,  0,  0,  0, 68, 65, 84, 65, 56,  1,  0,  0,
-232,210, 44, 21,  1,  0,  0,  0,157,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, 51, 51, 51, 63,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 65,  0,  0,  0,  0,
-  1,  0,  0,  0,  1,  0,  7,  0, 56,182, 47,  4,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0, 24,137, 29,  2,
+  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,168,135, 29,  2,  0,  0,  0,  0,  0,  0, 64,192,
+  0,  0,126, 67,  0,  0,  0,  0,  0,  0, 72, 66,112,189, 17,192,246, 70,125, 67,  0,  0,  0,  0,  0,  0, 72, 66,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 51,  6,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,
+ 51,  6,  0,  0, 18,  0,  0,  0, 97,  0,  0,  0,  0,  0,128, 63,  0,  0, 72, 66,  0,124,146, 72,  0,  0, 72, 66,205,204,204, 61,
+  0,  0, 32, 65, 72,  0,  0,  0,  0,  0,  0,  2,  4,  0,  0,  4,  8,  0, 52,  6, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 51,  6,  0,  0, 26,  0,  0,  0,123,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,  6, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,213,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,216,  0,  0,  0,136,138, 29,  2,
+  0,  0,  0,  0,173,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  0,
-  3,  0,  0,  0,  1,  0,  3,  0,  8,  8,  0,  0,  0,  0, 12, 66,  0,  0,128, 63,205,204,204, 61,  0,  0,250, 67,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 10,  0,  7,  1,  0,  3,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,104,212, 44, 21,  1,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,
-232,220, 44, 21,  1,  0,  0,  0, 56,199, 44, 21,  1,  0,  0,  0, 40,144, 44, 21,  1,  0,  0,  0,168,145, 44, 21,  1,  0,  0,  0,
-  8,146, 44, 21,  1,  0,  0,  0,232,144, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,159,  2,  0,  0,
-133,  0,  0,  0,139,  1,  0,  0,  2,  2,160,  2,  7,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  8,219, 44, 21,  1,  0,  0,  0,  8,219, 44, 21,  1,  0,  0,  0, 72,213, 44, 21,  1,  0,  0,  0,152,217, 44, 21,  1,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0, 72,213, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,184,214, 44, 21,  1,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,100, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0, 40, 68,
-  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,159,  2,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,192,103, 68,  0,  0,200, 65,
-  0,192,103, 68,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  4, 10,  0,160,  2,
- 26,  0,160,  2, 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,159,  2,  0,  0,
-133,  0,  0,  0,158,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  2, 26,  0,  0,  0,  1,  0,
-  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,
+  6,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,168,139, 29,  2,  0,  0,  0,  0,197,  0,  0,  0,  1,  0,  0,  0,104,146, 29,  2,
+  0,  0,  0,  0,184,134, 29,  2,  0,  0,  0,  0,200,108, 29,  2,  0,  0,  0,  0, 72,112, 29,  2,  0,  0,  0,  0,184,112, 29,  2,
+  0,  0,  0,  0, 56,109, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 53,  6,  0,  0,126,  7,  0,  0,185,  1,  0,  0,
+ 31,  3,  0,  0,  3,  3, 74,  1,103,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,168,209,  2,  2,  0,  0,  0,  0,120,143, 29,  2,
+  0,  0,  0,  0,120,143, 29,  2,  0,  0,  0,  0,152,140, 29,  2,  0,  0,  0,  0,  8,142, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  6, 68,  2,  0,  0,  0,  0, 56,177, 79,  3,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  1,  0,  0,152,140, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  8,142, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,128,244, 67,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,165, 67,  0,  0,  0,  0,
+  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 73,  1,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,128,164, 67,  0,  0,200, 65,  0,128,164, 67,
+  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  0, 10,  0, 74,  1, 26,  0, 74,  1,
+ 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 53,  6,  0,  0,126,  7,  0,  0,  6,  3,  0,  0,
+ 31,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 74,  1, 26,  0,  0,  0,  1,  0,  1,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,211,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 40,  1,  0,  0,  8,142, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,140, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,128,141, 67,  0,  0,244,194,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,156, 67,  0,128,157,195,
+  0,  0,  0,  0, 57,  1,  0,  0, 74,  1,  0,  0, 18,  0,  0,  0, 76,  1,  0,  0,  0,  0,  0,  0, 56,  1,  0,  0,  0,  0,  0,  0,
+ 17,  0,  0,  0,  0,  0,  0,  0, 56,  1,  0,  0, 18,  0,  0,  0, 76,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,128, 63,  0,  0,128, 63, 18,  6,  0,  0,  2,  0,  3,  3,  0,  0, 12,  4,  6,  0, 74,  1, 77,  1, 57,  1,
+ 59,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 53,  6,  0,  0,126,  7,  0,  0,185,  1,  0,  0,
+  5,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 74,  1, 77,  1,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,210,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0,184,214, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0, 40,216, 44, 21,  1,  0,  0,  0,
- 72,213, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 67,  0,  0,112,193,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 67,
-  0,  0, 91,195,  0,  0,  0,  0,200,  0,  0,  0,217,  0,  0,  0, 18,  0,  0,  0,236,  0,  0,  0,  0,  0,  0,  0,199,  0,  0,  0,
-  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,199,  0,  0,  0, 18,  0,  0,  0,236,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 63,  0,  0,128, 63, 10,  6,  0,  0,  2,  0,  3,  3,  0,  0,  0,  4,  6,  0,217,  0,
-237,  0,200,  0,219,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,216,  0,  0,  0,
-159,  0,  0,  0,139,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,217,  0,237,  0,  0,  0,  2,  0,
-  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 65, 84, 65,
+ 24,  1,  0,  0,120,143, 29,  2,  0,  0,  0,  0,166,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0, 40,216, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,152,217, 44, 21,  1,  0,  0,  0,
-184,214, 44, 21,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136, 69, 62,  3,
+  0,  0,  0,  0,136, 69, 62,  3,  0,  0,  0,  0,216,144, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, 68, 65, 84, 65, 16,  0,  0,  0,216,144, 29,  2,  0,  0,  0,  0,220,  0,  0,  0,
+  1,  0,  0,  0, 14,  0,  0,  0, 14,  0,  0,  0, 56,145, 29,  2,  0,  0,  0,  0, 68, 65, 84, 65,224,  0,  0,  0, 56,145, 29,  2,
+  0,  0,  0,  0,219,  0,  0,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,152,219, 31,  2,  0,  0,  0,  0, 19,  0,  0,  0,
+  1,  0,  1,  0,152,219, 31,  2,  0,  0,  0,  0, 20,  0,  0,  0,  1,  0,  1,  0,152,219, 31,  2,  0,  0,  0,  0, 21,  0,  1,  0,
+  1,  0,  0,  0,152,219, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  8,240, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  0,  1,  0,248,248, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,232, 78, 33,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  0,  1,  0, 56,  6, 32,  2,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0, 24,172, 32,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  0,  1,  0,232,255, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,136,235, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  0,  1,  0,168,242, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,184,234, 31,  2,  0,  0,  0,  0, 21,  0,  0,  0,
+  1,  0,  1,  0,152,219, 31,  2,  0,  0,  0,  0, 68, 65, 84, 65,160,  0,  0,  0,104,146, 29,  2,  0,  0,  0,  0,197,  0,  0,  0,
+  1,  0,  0,  0,184,159, 29,  2,  0,  0,  0,  0,168,139, 29,  2,  0,  0,  0,  0,136,110, 29,  2,  0,  0,  0,  0,248,110, 29,  2,
+  0,  0,  0,  0, 88,108, 29,  2,  0,  0,  0,  0, 24,110, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,165,  2,  0,  0,
+ 51,  6,  0,  0,125,  0,  0,  0,233,  3,  0,  0,  1,  1,143,  3,109,  3,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,168,215,  2,  2,
+  0,  0,  0,  0, 56,158, 29,  2,  0,  0,  0,  0, 56,158, 29,  2,  0,  0,  0,  0, 88,147, 29,  2,  0,  0,  0,  0, 24,153, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,120, 76,  3,  0,  0,  0,  0,104,176,176,  3,
+  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0, 88,147, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,200,148, 29,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,113, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,
+  0,192, 99, 68,  0,  0,  0,  0,  0,  0,208, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,142,  3,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,128, 99, 68,
+  0,  0,200, 65,  0,128, 99, 68,  0,  0,200, 65,  0,  0,128, 63,  0,  0,128, 63,  0,  0,  0,  0,  2,  0,  3,  3,  4,  0, 12,  0,
+ 10,  0,143,  3, 26,  0,143,  3, 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,165,  2,  0,  0,
+ 51,  6,  0,  0,125,  0,  0,  0,150,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,143,  3, 26,  0,
+  0,  0,  1,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,226,  2,  2,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,200,148, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0, 56,150, 29,  2,
+  0,  0,  0,  0, 88,147, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 67,  0, 64, 70,196,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 15, 67,255,127, 70,196,  0,  0,  0,  0,143,  0,  0,  0,160,  0,  0,  0, 18,  0,  0,  0, 43,  3,  0,  0,  0,  0,  0,  0,
+142,  0,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,142,  0,  0,  0, 18,  0,  0,  0, 43,  3,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  0,  0,  0,  1,  0,  7,  0, 18,  0,  0,  0,
+  6,  0,160,  0, 44,  3,143,  0, 26,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,165,  2,  0,  0,
+165,  2,  0,  0,151,  0,  0,  0,233,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 83,  3,
+  0,  0,  5,  0,  3,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,222,  2,  2,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,159,  2,  0,  0,159,  2,  0,  0,
-159,  0,  0,  0,139,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  4,  0,
-  4,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0, 56,150, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,168,151, 29,  2,
+  0,  0,  0,  0,200,148, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 67,  0,  0,206,194,  0,  0,  0,  0,  0,  0,  0,  0,
+231,102, 16, 67,  0,  0,206,194,  0,  0,  0,  0,143,  0,  0,  0,160,  0,  0,  0, 18,  0,  0,  0,119,  0,  0,  0,  0,  0,  0,  0,
+142,  0,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,142,  0,  0,  0, 18,  0,  0,  0,119,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,  0,  0, 64, 10,  0,  0,  0,  1,  0,  7,  0, 18,  0,  0,  4,
+  6,  0,160,  0,120,  0,143,  0,102,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,165,  2,  0,  0,
+ 51,  6,  0,  0,151,  0,  0,  0,151,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,
+  0,  0,  6,  0, 34,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,223,  2,  2,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 68, 65, 84, 65, 40,  1,  0,  0,152,217, 44, 21,  1,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
- 40,216, 44, 21,  1,  0,  0,  0,  0,  0, 16,193,  0,  0,130, 67,  0,  0,160,192,  0,  0,160, 64,  0,  0,  0,  0,  0,  0,122, 67,
-  0,  0, 16,193,  0,  0, 32, 65,  0,  0,  0,  0, 17,  0,  0,  0, 18,  0,  0,  0,236,  0,  0,  0, 18,  0,  0,  0,198,  1,  0,  0,
-  0,  0,  0,  0, 17,  0,  0,  0, 18,  0,  0,  0,198,  1,  0,  0, 18,  0,  0,  0,236,  0,  0,  0,111, 18,131, 58,111, 18,131, 58,
-  0,124,146, 72,  0, 80, 67, 71,  0,  0,  0,  0,  0,  0,  0,  0,105,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,199,  1,
-237,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,217,  0,  0,  0,159,  2,  0,  0,
-159,  0,  0,  0,139,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,199,  1,237,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 68, 65, 84, 65, 40,  1,  0,  0,168,151, 29,  2,  0,  0,  0,  0,198,  0,  0,  0,  1,  0,  0,  0, 24,153, 29,  2,
+  0,  0,  0,  0, 56,150, 29,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 35, 67,  0,128, 96,196